【发布时间】:2017-05-28 10:24:00
【问题描述】:
我有三个数据框df1、df2、df3
df1
Freq
Yes 10
No 2
df2
Freq
Yes 5
No 7
df2
Freq
Yes 5
No 7
我把它合并到df
df1 <- data.frame(Freq= c(10,2))
df2 <- data.frame(Freq= c(5,7))
df3 <- data.frame(Freq= c(9,3))
rownames(df1) <- c("Yes","No")
rownames(df2) <- c("Yes","No")
rownames(df3) <- c("Yes","No")
df <- data.frame(rbind(df1,df2,df3))
df
Freq
Yes 10
No 2
Yes1 5
No1 7
Yes2 9
No2 3
现在,如果您看到df,只要它发现重复的行名,它就会在其旁边粘贴一个索引。
如何删除重复名称的索引并保持原样?
然后我将rownames(df) 更改为df 中的第一列,Answer 作为列名。
library(tibble)
df <- rownames_to_column(df,"Answer")
Answer Freq
Yes 10
No 2
Yes1 5
No1 7
Yes2 9
No2 3
想要的结果
Answer Freq
Yes 10
No 2
Yes 5
No 7
Yes 9
No 3
【问题讨论】:
-
你怎么能拥有data.frame
df首先!?拥有唯一的行名会引发错误 -
是的,抱歉,我看到我已经编辑了问题
-
data.frames 不能有重复的行名。不过,您可以使用正则表达式轻松修复第二个版本:
library(tidyverse); df %>% rownames_to_column('Answer') %>% mutate(Answer = sub('\\d', '', Answer)) -
更好的方法是在
rbind之前致电rowname_to_column。如果您将 data.frames 放在一个列表中(无论如何都是个好主意),purrr 让这变得非常简单:library(tidyverse); list(df1, df2, df3) %>% map_df(rownames_to_column, 'Answer') -
@eipi10 您可以使用
.id参数,该参数将被传递给bind_cols:list(df1, df2, df3) %>% map_df(rownames_to_column, 'Answer', .id = 'df')
标签: r dataframe duplicates rowname