如何使rownames成为第一列,并用数据帧列表中的值替换给定单元格?

如何使rownames成为第一列,并用数据帧列表中的值替换给定单元格?,r,lapply,R,Lapply,我有一个大约200个数据集的列表,其中每个数据集如下所示: Year 2010 2011 2012 2013 2014 Womenpct 0.6 0.8 0.7 0.6 0.7 Menpct 0.4 0.2 0.3 0.4 0.3 我想要实现的是首先将每个数据集中的行名替换为 Year 2010 2011 2012 2013 2014 Women 0.6 0.8 0.7 0.6 0.7 Men 0.4 0.2 0.3 0.4

我有一个大约200个数据集的列表,其中每个数据集如下所示:

Year     2010  2011 2012 2013 2014
Womenpct 0.6   0.8  0.7  0.6  0.7
Menpct   0.4   0.2  0.3  0.4  0.3
我想要实现的是首先将每个数据集中的行名替换为

Year   2010  2011 2012 2013 2014
Women  0.6   0.8  0.7  0.6  0.7
Men    0.4   0.2  0.3  0.4  0.3
数据:

对于行名,我尝试使用
lappy
更改它们

df <- lapply(df, function(x) rownames(x)[1] <- "Women")
它似乎将我的数据帧转换为新列表

有什么方法可以让R为列表中的所有数据帧应用所需的函数吗


任何帮助都将不胜感激。

放弃应用函数,这将满足您的需要:

for (i in seq_along(table.list)) {
  df <- table.list[[i]]
  rownames(df)[-1] <- c("Women", "Men")
  df <- cbind(c("", rownames(df)[-1]), df)
  table.list[[i]] <- df
}
<代码>用于(沿(表列表)的序号i){
df基于
dput
看起来您有一个列名称为第一行的矩阵列表。我们可以这样做

lapply(df, function(x) {
    #Convert matrix to dataframe
    temp <- as.data.frame(x, stringsAsFactors = FALSE)
    #Remove pct from rownames
    rownames(temp) <- sub("pct$", "", rownames(temp))
    #Add rownames as new column
    temp$Year <- rownames(temp)
    #Assign first row as column names
    names(temp) <- temp[1, ]
    #Remove first row
    temp[-1, ]
})

#$`1`
#           2010      2011      2012      2013      2014  Year
#Women 0.5388350 0.5360517 0.5460852 0.5401961 0.5475490 Women
#Men   0.4611650 0.4639483 0.4539148 0.4598039 0.4524510   Men

#$`2`
#           2010      2011      2012      2013      2014  Year
#Women 0.5388350 0.5360517 0.5460852 0.5401961 0.5475490 Women
#Men   0.4611650 0.4639483 0.4539148 0.4598039 0.4524510   Men
lappy(df,函数(x){
#将矩阵转换为数据帧

你可以发布
dput(df[[1]])吗
?这些看起来已经像列了,也许您想添加新的行名。@Ronaksah list(
1
=结构(c(“2010”、“0.5388350”、“0.4611650”、“2011”、“0.5360517”、“0.4639483”、“2012”、“0.5460852”、“0.4539148”、“2013”、“0.5401961”、“0.4598039”、“2014”、“0.5475490”、“0.4524510”),.Dim=c(3L、5L),.Dimnames=list(c(“年份”、“女性PCT”、“男性PCT”)、NULL)您的
dput
返回一个矩阵。您对使用矩阵感兴趣吗?
 lapply(df, function(x) add_column(x, Gender = "", .before = 1))
for (i in seq_along(table.list)) {
  df <- table.list[[i]]
  rownames(df)[-1] <- c("Women", "Men")
  df <- cbind(c("", rownames(df)[-1]), df)
  table.list[[i]] <- df
}
lapply(df, function(x) {
    #Convert matrix to dataframe
    temp <- as.data.frame(x, stringsAsFactors = FALSE)
    #Remove pct from rownames
    rownames(temp) <- sub("pct$", "", rownames(temp))
    #Add rownames as new column
    temp$Year <- rownames(temp)
    #Assign first row as column names
    names(temp) <- temp[1, ]
    #Remove first row
    temp[-1, ]
})

#$`1`
#           2010      2011      2012      2013      2014  Year
#Women 0.5388350 0.5360517 0.5460852 0.5401961 0.5475490 Women
#Men   0.4611650 0.4639483 0.4539148 0.4598039 0.4524510   Men

#$`2`
#           2010      2011      2012      2013      2014  Year
#Women 0.5388350 0.5360517 0.5460852 0.5401961 0.5475490 Women
#Men   0.4611650 0.4639483 0.4539148 0.4598039 0.4524510   Men
df <- list(`1` = structure(c("2010", "0.5388350", "0.4611650", "2011", 
"0.5360517", "0.4639483", "2012", "0.5460852", "0.4539148", "2013", 
"0.5401961", "0.4598039", "2014", "0.5475490", "0.4524510"), .Dim = c(3L, 
5L), .Dimnames = list(c("Year", "Womenpct", "Menpct"), NULL)), 
`2` = structure(c("2010", "0.5388350", "0.4611650", "2011", 
"0.5360517", "0.4639483", "2012", "0.5460852", "0.4539148", 
"2013", "0.5401961", "0.4598039", "2014", "0.5475490", "0.4524510"
), .Dim = c(3L, 5L), .Dimnames = list(c("Year", "Womenpct", 
"Menpct"), NULL)))