r - 根据来自 R 中另一个的信息,将具有计数总和的新列添加到数据帧
问题描述
我需要帮助才能将计数列添加到tab1
根据另一个调用的表中tab2
。
这是第一个选项卡:
选项卡1
Event_Groups Other_column
1 1_G1,2_G2 A
2 2_G1 B
3 4_G4 C
4 7_G5,8_G5,9_G5 D
正如您在Event_Groups
列中看到的那样,我有 2 条信息(Event
以及Groups
用“_”分隔的数字)。这些信息也可以在tab2$Group
and中找到,其想法是针对(用逗号分隔)中的tab2$Event
行中的每个元素,计算其中AND中的行数,然后将此计数添加到名为 的新列中的tab1中。tab1
tab2
VALUE1 < 10
VALUE2 > 30
Sum_count
这是 tab2
Group Event VALUE1 VALUE2
1 G1 1 5 50 <- VALUE1 < 10 & VALUE2 > 30 : count 1
2 G1 2 6 20 <- VALUE2 < 30 : count 0
3 G2 2 50 50 <- VALUE1 > 10 : count 0
4 G3 3 0 0
5 G4 1 0 0
6 G4 4 2 40 <- VALUE1 < 10 & VALUE2 > 30 : count 1
7 G5 7 1 70 <- VALUE1 < 10 & VALUE2 > 30 : count 1
8 G5 8 4 67 <- VALUE1 < 10 & VALUE2 > 30 : count 1
9 G5 9 3 60 <- VALUE1 < 10 & VALUE2 > 30 : count 1
例子 :
- 例如对于tab1中 row1 的第一个元素:
1_G1
我们在tab2 (row1) 中看到VALUE1 < 10 & VALUE2 > 30,所以我数 1。 - 对于第二个元素 (row1) :
2_G2
我们在tab2 (row3) 中看到VALUE1 > 10,所以我算 0。
这是预期的结果tab1数据框;
Event_Groups Other_column Sum_count
1_G1,2_G2 A 1
2_G1 B 0
4_G4 C 1
7_G5,8_G5,9_G5 D 3
我不知道我是否足够清楚,请不要犹豫提出问题。
如果有帮助,这是 dput 格式的两个表格:
选项卡1
structure(list(Event_Groups = structure(1:4, .Label = c("1_G1,2_G2",
"2_G1", "4_G4", "7_G5,8_G5,9_G5"), class = "factor"), Other_column =
structure(1:4, .Label = c("A", "B", "C", "D"), class = "factor")),
class = "data.frame", row.names = c(NA,
-4L))
选项卡2
structure(list(Group = structure(c(1L, 1L, 2L, 3L, 4L, 4L, 5L,
5L, 5L), .Label = c("G1", "G2", "G3", "G4", "G5"), class = "factor"),
Event = c(1L, 2L, 2L, 3L, 1L, 4L, 7L, 8L, 9L), VALUE1 = c(5L,
6L, 50L, 0L, 0L, 2L, 1L, 4L, 3L), VALUE2 = c(50, 20, 50,
0, 0, 40, 70, 67, 60)), class = "data.frame", row.names = c(NA,
-9L))
解决方案
你可以尝试一个tidyverse
library(tidyverse)
tab1 %>%
rownames_to_column() %>%
separate_rows(Event_Groups, sep = ",") %>%
separate(Event_Groups, into = c("Event", "Group"), sep="_", convert = T) %>%
left_join(tab2 %>%
mutate(count = as.numeric(VALUE1 < 10 & VALUE2 > 30)),
by = c("Event", "Group")) %>%
unite(Event_Groups, Event, Group) %>%
group_by(rowname) %>%
summarise(Event_Groups = toString(Event_Groups),
Other_column = unique(Other_column),
count =sum(count))
# A tibble: 4 x 4
rowname Event_Groups Other_column count
<chr> <chr> <chr> <dbl>
1 1 1_G1, 2_G2 A 1
2 2 2_G1 B 0
3 3 4_G4 C 1
4 4 7_G5, 8_G5, 9_G5 D 3
推荐阅读
- rust - 锈:Vec
> 进入 Vec - python - PyQtGraph:在没有进程管理器的情况下停止执行
- r - 如何根据行中字段的值添加具有值的列?
- laravel - 我如何解决 laravel Homestead 错误 500
- c# - 如何将某些文件/类/测试移动到新的 Visual Studio 项目中?
- php - PHP 没有看到 REACT 发送的请求
- python - 如何使 python 文件作为单独的进程/线程运行
- xlsx - 我可以使用单元格中的内容来存储提取 xls 公式的选项卡名称吗?
- python - 验证损失有时会飙升
- algorithm - 用python代码确定我的算法的时间复杂度