我想处理一堆数据框的列名和行名,例如 W1 , W2 , W3 在以前建立的列表中列出,例如 W 。我已经看到了很多类似的问题,但是似乎没有一个能解决我的难题:
> W <- list(W1, W2, W3)
> lapply(W, is.data.frame)
$W1
[1] TRUE
$W2
[1] TRUE
$W3
[1] TRUE
最终我要做的是:
> lapply(W, function(x) rowname(x) = x[,1])
> lapply(W, function(x) x = x[,-1])
,但在两种情况下,我都获得每个数据帧第一列的内容。我缺少一些基本的东西...
答案 0 :(得分:3)
只需将两个步骤合并为一个lapply
。请记住,在R中,一个函数将返回它求值的最后一个内容,因此在您的第一个lapply
中,它将仅返回每个data.frame的rownames
,因为这是函数所做的最后一个操作。之后添加x[,-1]
使其返回修改后的data.frame,减去第一列。
W1 <- data.frame(a=letters[1:3], b=1:3, c=4:6)
W2 <- data.frame(a=letters[4:5], b=4:5, c=5:6)
W3 <- data.frame(a=LETTERS[1:5], b=1:5, c=11:15)
W <- list(W1, W2, W3)
W <- lapply(W, function(x) {
row.names(x) <- x[,1]
x[,-1]
})
答案 1 :(得分:0)
使用 tidyverse
使用@ Taiki-Sakai的数据:
library(tidyverse)
map(W, column_to_rownames, "a") # use remove_rownames(W) if relevant
# [[1]]
# b c
# a 1 4
# b 2 5
# c 3 6
#
# [[2]]
# b c
# d 4 5
# e 5 6
#
# [[3]]
# b c
# A 1 11
# B 2 12
# C 3 13
# D 4 14
# E 5 15
#