使用R更改特定列中的数据

时间:2019-07-19 03:37:46

标签: r tidyverse purrr

我想遍历数据帧并更改特定列中的数据。我想专门使用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列。

1 个答案:

答案 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)

这似乎很复杂。