Подсчитать количество строк в другом кадре данных - PullRequest
0 голосов
/ 07 июня 2018

У меня есть два кадра данных df1 и df2:

df1 <- data.frame(id=1:5, var1=c("c3e", "d3r", "ff2", "dfl", "df4"))
df2 <- data.frame(id=1:10, var1=c("d3r", "d3r", "c3e", "dfl", "dfl", "dfl", "c3e", "df4", "c3e", "c3e"))

Как мне лучше всего создать новый столбец в df1, дающий количество появлений каждого значения df1$var1 в df2?Например, «c3e» появляется четыре раза, «d3r» дважды и т. Д.

Ответы [ 3 ]

0 голосов
/ 07 июня 2018
df1$count <- table(df2$var1)[df1$var1]
df1$count[is.na(df1$count)] <- 0          # change NA to 0

df1
#   id var1 count
# 1  1  c3e     4
# 2  2  d3r     2
# 3  3  ff2     0
# 4  4  dfl     3
# 5  5  df4     1

@ Jaap также предложил:

df1$count <- table(factor(df2$var1, levels = df1$var1))
0 голосов
/ 07 июня 2018

Вот один вариант с data.table

library(data.table)
setDT(df1)[setDT(df2)[df1, .N,  on = .(var1), by = .EACHI],
                 count := N , on = .(var1)]
df1
#   id var1 count
#1:  1  c3e     4
#2:  2  d3r     2
#3:  3  ff2     0
#4:  4  dfl     3
#5:  5  df4     1
0 голосов
/ 07 июня 2018

Мы можем просмотреть каждое значение df1$var1 и вычислить, сколько раз это значение встречается в df2 s var1.

df1$count <- sapply(df1$var1, function(x) sum(df2$var1 %in% x))

df1
#  id var1 count
#1  1  c3e     4
#2  2  d3r     2
#3  3  ff2     0
#4  4  dfl     3
#5  5  df4     1
...