我有一个数据框,是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
个实例?
答案 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"