R 如何找到向量的个数';另一个向量中的元素?
我有两个向量。第一个向量名是R 如何找到向量的个数';另一个向量中的元素?,r,vector,R,Vector,我有两个向量。第一个向量名是注释$author\u id,第二个向量名是注册$learner\u id。我想在enrolmensdataframe中添加一个新列,显示comments$author\u idvector中每个注册$learner\u id行的重复行数 例如: if(enrolments$learner_id[1] repeated 5 times in comments$author_id) enrolments$freqs[1] = 5 如果不使用任何循环,我可以这
注释$author\u id
,第二个向量名是注册$learner\u id
。我想在enrolmens
dataframe中添加一个新列,显示comments$author\u id
vector中每个注册$learner\u id
行的重复行数
例如:
if(enrolments$learner_id[1] repeated 5 times in comments$author_id)
enrolments$freqs[1] = 5
如果不使用任何循环,我可以这样做吗
矢量样本如下所示:
df1 <- data.frame(v1 = c(1,1,1,4,5,5,4,1,2,3,5,6,2,1,5,2,3,4,1,6,4,2,3,5,1,2,5,4))
df2 <- data.frame(v2 = c(1,2,3,4,5,6))
df1使用您的df1
和df2
示例,您可以这样做:
# Make data
df1 = data.frame(v1 = c(1,1,1,4,5,5,4,1,2,3,5,6,2,1,5,2,3,4,1,6,4,2,3,5,1,2,5,4))
df2 = data.frame(v2 = c(1,2,3,4,5,6))
# Add 'count' variable as reqeuested
df2$counts = sapply(df2$v2, function(x) {
sum(df1$v1 == x, na.rm = T) #na.rm=T just in case df1$v1 has missing values
})
df2 #view output
实际上,您所做的是聚合df1
以获得计数,然后将该计数添加回df2
集合。这种逻辑可以很容易地转换为一系列不同的方法:
# base R
merge(
df2,
aggregate(cbind(df1[0], count=1), df1["v1"], FUN=sum),
by.x="v2", by.y="v1", all.x=TRUE
)
# data.table
library(data.table)
setDT(df1)
setDT(df2)
df2[df1[, .(count=.N), by=v1], on=c("v2"="v1")]
# dplyr
library(dplyr)
df1 %>%
group_by(v1) %>%
count() %>%
left_join(df2, ., by=c("v2"="v1"))
# v2 count
#1 1 7
#2 2 5
#3 3 3
#4 4 5
#5 5 6
#6 6 2
“[列表]给我这个错误:$中的错误在你的问题中包含a将增加你得到答案的机会。使用dput
函数粘贴到你所指的数据框或其中的一部分。@jsb我试图添加最小的可复制示例。我希望是如你所说的那样。@JonahThunderbolt-我稍微编辑了一下,使其成为有效数据。frames。我希望这没问题。@TheLate Mail thanx bro gj:)。我是一个新手用户。可能会起作用,但需要很长时间。我等了5分钟,但还没有完成。yetLast代码给了我这个错误,对我来说太复杂了:D:警告消息:在左侧加入(x,y,by$x,by$y,后缀$x,后缀$y):将不同级别的因子连接在一起,强制转换为字符向量。
。一周后我开始学习R。@JonahThunderbolt-这是一个警告,不是错误。这只是意味着在一个data.Frame中有一个类别在另一个data.Frame中不存在。连接应该仍然可以正常工作。它不会对dataframe进行任何更改当前位置S.我有一长串的待办事项,我在哭now@JonahThunderbolt-您需要覆盖以前的数据集-df2是的,它可以工作。非常感谢兄弟。但是我尝试了相同的代码来计算每个学习者的喜好。final=final[comments[,(total_likes=.N),by=likes],on=c(“学习者id=”作者id“)]
我应该如何编辑此代码?我想了解有关此语法的更多信息。@lukeaA final$comments\u count2=制表(系数(comments$author\u id,final$learner\u id),长度(final$learner\u id))我试过了,它先起作用了,但现在不起作用。怎么了?它添加了新的列,只表示0。@JonahThunderbolt请提供一个可复制的示例。
df1 <- data.frame(v1 = c(1,1,1,4,5,5,4,1,2,3,5,6,2,1,5,2,3,4,1,6,4,2,3,5,1,2,5,4))
df2 <- data.frame(v2 = c(1,2,3,0,4,5,6,7))
df2$count <- tabulate(factor(df1$v1, df2$v2))
# Error in `$<-.data.frame`(`*tmp*`, count, value = c(7L, 5L, 3L, 0L, 5L, :
# replacement has 7 rows, data has 8
df2$count <- tabulate(factor(df1$v1, df2$v2), length(df2$v2))
df2
# v2 count
# 1 1 7
# 2 2 5
# 3 3 3
# 4 0 0
# 5 4 5
# 6 5 6
# 7 6 2
# 8 7 0