我想遍历数据帧并更改特定列中的数据。我想专门使用purrr做到这一点。
df = data.frame(a = rnorm(4), b = rnorm(4), c = rnorm(4))
print(df)
a b c
1 0.6770575 -0.115178 -0.1521001
2 0.3291719 1.436888 0.1287069
3 -0.2183360 -1.311364 -0.2227273
4 -1.0290438 1.516289 0.8771463
#I want to change every other column. So I create a sequence.
df.seq = seq(1, ncol(df), 2)
print(df.seq)
[1] 1 3
现在,我想遍历并将指定的列更改为“ data1”和“ data2”。
这是我的尝试。
change = c("data1", "data2")
map2_dfr(df.seq, change, ~df[,.x] = .y)
我尝试在map2 ..中使用一些dplyr,但还是没有运气。 我希望结果如下所示。
a b c
1 data1 -1.092680 data2
2 data1 -0.340103 data2
3 data1 1.183388 data2
4 data1 -1.257398 data2
此外,我必须在这里使用一个序列。我的实际数据是我必须输入一个字符串每29列。
答案 0 :(得分:1)
我不知道为什么需要在purrr
中完成此操作的原因,特别是在基本R版本既简单又简单的情况下
df[df.seq] <- as.list(change)
df
# a b c
#1 data1 -0.4726404 data2
#2 data1 -1.0560956 data2
#3 data1 -0.6405799 data2
#4 data1 -0.8501395 data2
但是,如果需要放在purrr
中,则很少有选择
df[df.seq] <- purrr::map2(df[df.seq], change, ~replace(., TRUE, .y))
或者只是
df[df.seq] <- purrr::map2(df[df.seq], change, ~.y)
这似乎很复杂。