我有以下简化的数据帧df(
dput
以下):
> df
group value
1 A 1
2 A 4
3 B 2
4 B 3
5 C 2
6 C 1
我想使用为每组应用for循环
lapply
。因此,首先我使用
split
。然后我想在每个数据帧中执行for循环,但它不起作用。以下是一些可重复的代码(请注意简化的for循环以使其可重复):
df = data.frame(group = c("A", "A", "B", "B", "C", "C"),
value = c(1, 4, 2, 3, 2, 1))
l = split(df, df$group)
lapply(l, \(x) {
for(i in 1:nrow(x)) {
if(x$value[i] == 1) {
x$value[i] = x$value[i] + 1
} else
x$value[i] = x$value[i] + 2
}
})
#> $A
#> NULL
#>
#> $B
#> NULL
#>
#> $C
#> NULL
创建于2023-02-15
reprex v2.0.2
这应该在为1的值上加1,否则加2(这非常简单,但可重复)。正如您所看到的,它返回NULL。预期输出应如下所示:
$A
group value
1 A 2
2 A 6
$B
group value
3 B 3
4 B 5
$C
group value
5 C 4
6 C 2
所以我想知道如何将for循环应用于
lapply
?为什么它回来了
NULL
?
dput
df:
df<-structure(list(group = c("A", "A", "B", "B", "C", "C"), value = c(1,
4, 2, 3, 2, 1)), class = "data.frame", row.names = c(NA, -6L))