在数据框中每列的列之后命名输入和输出变量

时间:2017-11-07 17:36:39

标签: r

我有一个数据框,是dcast重塑的结果。

我希望能够从除'id'之外的每个列名创建一个命名字符变量。

数据:

id <- c("123", "345", "789", "234")
c10010 <- c(NA, NA, "789", NA)
c11211 <- c("123", NA, NA, "234")
c10013 <- c(NA, "345", NA, NA)
df <- data.frame(id, c10010, c11211, c10013)

我想要实现的非程序性示例是:

c11211_char <- paste(paste(na.omit(df$c11211)), collapse=",")

正确输出123,234

如何让每个列名替换上面的c11211个实例?

2 个答案:

答案 0 :(得分:2)

您还可以使用list2env

list2env(lapply(df[-1], function(x) paste(na.omit(x), collapse = ",")), env = .GlobalEnv)

使用列表名称将命名列表的每个元素作为对象存储在全局环境中。

答案 1 :(得分:1)

您可以使用akrun解决方案然后assign()通过迭代所有列来定义每个变量。

id <- c("123", "345", "789", "234")
c10010 <- c(NA, NA, "789", NA)
c11211 <- c("123", NA, NA, "234")
c10013 <- c(NA, "345", NA, NA)
df <- data.frame(id, c10010, c11211, c10013)

s <- sapply(df[-1], function(x) paste(na.omit(x), collapse=","))
for (c in names(s)) {
    assign(names(s[c]), as.character(s[c]))
}

测试:

> c10010
[1] "789"
> c11211
[1] "123,234"
> c10013
[1] "345"