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