设置多个数据帧的行名称

时间:2015-07-29 16:36:08

标签: r

我有几个数据框,我想将每个数据框的行名设置为第一列的值,然后从数据框中删除该列。我试图以程序化的方式尝试这样做。

每个数据框如下所示:

df[1:4,1:4]
       V1 V2 V3 V4
1 DDX11L1  0  0  0

2  WASH7P  0  0  0

3 FAM138A  0  0  0

4 FAM138F  0  0  0

其中V1由基因符号组成。

我希望rownames由V1中的值组成,这很容易在一个接一个的基础上执行:

rownames(df) <- df[,1]
df <- df[,-1]

我一直在努力将这种逻辑应用于循环或应用函数,但显然我还没有得到它。

2 个答案:

答案 0 :(得分:2)

如果您有数据框df1df2,...,dfn,则可以将它们放在l列表中,例如:

l <- list(df1, df2, df3, dfn)
# or (if they're actually named with numbers at the end)
l <- mget(paste0("df", 1:n))

...然后你可以同时处理它们:

l <- lapply(l, function(x) {
  rownames(x) <- x[,1]
  x[,-1]
})

如果你只有几个数据框,它可以节省输入只是定义一个处理函数,然后手工应用:

proc.df <- function(x) {
  rownames(x) <- x[,1]
  x[,-1]
}
df1 <- proc.df(df1)
df2 <- proc.df(df2)
# ...

答案 1 :(得分:2)

对此有很多“正确”的答案,但大多数都与此类似: Apply a function to each data frame

df1 <- data.frame(V1 = c('DDX11L1', 'WASH7P', 'FAM138A', 'FAM138F'), V2 = rep(0, 4), V3 = rep(0, 4), V4 = rep(0, 4))
df2 <- data.frame(V1 = c('a', 'b', 'c', 'd'), V2 = rep(0, 4), V3 = rep(0, 4), V4 = rep(0, 4))
dfList = list(df1, df2)
newList <- lapply(dfList, function(df) {
    rownames(df) <- df[,1]
    df <- df[,-1]
})