我正在尝试在列中使用唯一值来命名数据帧列表中的另一列
library(data.table)
a <- c("BZ", "BZ", "BZ", "US", "US", "US")
b <- c(1, 3, 5, 2, 4, 6)
c <- data.table(a, b)
d <- split(c, c$a)
然后我想删除A列,并使用a列中的唯一值来命名B列
例如,如果我只有一个带有一个值的数据框,我可以这样做:
c <- subset(c, a == "BZ")
x <- unique(c$a)
setnames(c, "b", x)
是否可以对数据帧列表执行此操作?
答案 0 :(得分:1)
我们可以使用lapply
来循环list
的{{1}},提取'a'的第一个元素(因为只有一个data.table
元素并设置unique
setnames
或者我们可以在library(data.table)
d1 <- lapply(d, function(x) setnames(x[, .(b)], x$a[1]))
之前使用列的子集
split
如果我们不想删除该列
d2 <- split(c[, .(b)], c$a)
Map(setnames, d2, names(d2))
或使用lapply(d, function(x) setnames(x, "b", x$a[1]))
Map
答案 1 :(得分:0)
这可能不是最优雅的解决方案,但我认为它可以满足您的需求:
images