我正在清理R中的一些数据,并且有一个这样的数据集:
x1, x2, x3
1, 24, 41
1, 22, 40
1, 21, 38
2, 20, 40
2, 21, 40
3, 22, 41
3, 24, 40
4, 20, 41
我想添加一个新列,每行的值基于x1和x2列。在x1中的每个组中,我想知道x2中的值是否大于或等于24,如果为true,则该组的新列中的所有值都设置为1.
所以数据应如下所示:
x1, x2, x3, x4
1, 24, 41, 1
1, 22, 40, 1
1, 21, 38, 1
2, 20, 40, 0
2, 21, 40, 0
3, 22, 41, 1
3, 24, 40, 1
4, 20, 41, 0
这样做的目的是聚合行。我想基于x1中的组聚合数据,但仍需要其他列的信息。
答案 0 :(得分:3)
以下是base R
df1$x4 <- table(df1$x1, df1$x2 >=24)[,2][df1$x1]
或dplyr
library(dplyr)
df1 %>%
group_by(x1) %>%
mutate(x4 = as.integer(any(x2 >=24)))
答案 1 :(得分:1)
类似于@ akrun的回答,这里是data.table
等价物:
library(data.table)
setDT(df)[, x4 := any(x2>=24)*1, by=x1]
<强>结果:强>
x1 x2 x3 x4
1: 1 24 41 1
2: 1 22 40 1
3: 1 21 38 1
4: 2 20 40 0
5: 2 21 40 0
6: 3 22 41 1
7: 3 24 40 1
8: 4 20 41 0
数据:强>
df = structure(list(x1 = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 4L), x2 = c(24L,
22L, 21L, 20L, 21L, 22L, 24L, 20L), x3 = c(41L, 40L, 38L, 40L,
40L, 41L, 40L, 41L)), .Names = c("x1", "x2", "x3"), class = "data.frame", row.names = c(NA,
-8L))