在R中计算另一个数据帧中的元素

在R中计算另一个数据帧中的元素,r,for-loop,R,For Loop,我需要在第一个数据帧中添加一个新列,其中包含第二个数据帧中相应id的出现次数。我创建了一个玩具示例来尝试这样做。我认为这需要一个for循环,但无法理解。以下是玩具数据集: id <- c(1:10) gender <- c('M','M','M','F','F','F','M','F','F','F') age <- c(23,33,45,66,12,6,18,31,26,77) first_df <- data.frame(id,gender,age) id <

我需要在第一个数据帧中添加一个新列,其中包含第二个数据帧中相应id的出现次数。我创建了一个玩具示例来尝试这样做。我认为这需要一个for循环,但无法理解。以下是玩具数据集:

id <- c(1:10)
gender <- c('M','M','M','F','F','F','M','F','F','F')
age <- c(23,33,45,66,12,6,18,31,26,77)
first_df <- data.frame(id,gender,age)

id <- c(1,3,8,1,2,3,7,9)
second_df <- data.frame(id)

id这里有一个使用
base R
的解决方案:

second_df <- as.data.frame(table(second_df))
first_df <- merge(x = first_df, y = second_df, by.x = 'id', by.y = 'second_df', all = TRUE)
first_df$Freq[is.na(first_df$Freq)] <- 0
names(first_df)[4] <- 'N'
这将为您提供:

  id gender age n
1   1      M  23 2
2   2      M  33 1
3   3      M  45 2
4   4      F  66 0
5   5      F  12 0
6   6      F   6 0
7   7      M  18 1
8   8      F  31 1
9   9      F  26 1
10 10      F  77 0

您可以使用
连接
。此处,
summary
统计每个
id
second\u df
中出现的次数,并将该值存储在
numb
中。然后
internal\u join
second\u df
附加到
first\u df
匹配
id

library(dplyr)
second_df <- second_df %>% 
  group_by(id) %>% 
  summarise(numb = n())

first_df %>% 
  left_join(second_df, by = "id")
   id gender age numb
1   1      M  23    2
2   2      M  33    1
3   3      M  45    2
4   4      F  66   NA
5   5      F  12   NA
6   6      F   6   NA
7   7      M  18    1
8   8      F  31    1
9   9      F  26    1
10 10      F  77   NA
库(dplyr)
第二个单位df%
分组依据(id)%>%
总结(numb=n())
第一个_df%>%
左联合(第二次联合,by=“id”)
性别年龄麻木
1米23 2
2米33 1
3米45 2
4 F 66 NA
5F 12NA
6F6NA
7米18 1
8 F 31 1
9 F 26 1
10 F 77 NA
首个df$计数
library(dplyr)
second_df <- second_df %>% 
  group_by(id) %>% 
  summarise(numb = n())

first_df %>% 
  left_join(second_df, by = "id")
   id gender age numb
1   1      M  23    2
2   2      M  33    1
3   3      M  45    2
4   4      F  66   NA
5   5      F  12   NA
6   6      F   6   NA
7   7      M  18    1
8   8      F  31    1
9   9      F  26    1
10 10      F  77   NA
first_df$counts <- lapply(first_df$id, function(x) sum(x == id))