首页 > 解决方案 > 使用 R 更改特定列中的数据

问题描述

我想遍历一个数据框并更改特定列中的数据。我想专门使用 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 列我必须输入一个字符串。

标签: rtidyversepurrr

解决方案


我不知道为什么需要在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)

这似乎是一种复杂的方式。


推荐阅读