x_names <-c("x1","x2","x3")
data <- c(1,2,3,4)
fake <- c(2,3,4,5)
for (i in x_names)
{
x = fake
data = as.data.frame(cbind(data,x))
#data <- data %>% rename(x_names = x)
}
我举了一个玩具的例子。此代码将生成一个数据帧,其中有1列称为data,而3列称为x。我希望将它们命名为x1,x2,x3(存储在x_names中),而不是调用x列。我将x_name放入代码中(注释掉了),但是它不起作用。你能帮我吗?
答案 0 :(得分:3)
我们还可以使用map_dfc
中的tidyverse
:
library(tidyverse)
cbind(data, map_dfc(x_names, ~ tibble(!!.x := fake)))
输出:
data x1 x2 x3
1 1 2 2 2
2 2 3 3 3
3 3 4 4 4
4 4 5 5 5
答案 1 :(得分:1)
我们可以避免a(b, c)
循环,并使用WORKDIR
使用RUN cd
来重复for
数据,并用replicate
命名数据框。
fake
理想情况下,应避免在循环中增加对象,但是解决OP循环问题的一种方法是
setNames
答案 2 :(得分:1)
一个选项只是分配'fake'以在base R
data[x_names] <- fake
data
# data x1 x2 x3
#1 1 2 2 2
#2 2 3 3 3
#3 3 4 4 4
#4 4 5 5 5
编辑:基于@avid_useR的评论
data <- data.frame(data)
答案 3 :(得分:1)
当您交换注释掉的行时
#data <- data %>% rename(x_names = x)
使用
colnames(data)[ncol(data)] <- i
它应该设置正确的名字。