use*_*293 12 merge r dataframe
如果我有两个数据框,例如:
df1 = data.frame(x=1:3,y=1:3,row.names=c('r1','r2','r3'))
df2 = data.frame(z=5:7,row.names=c('r5','r6','r7'))
Run Code Online (Sandbox Code Playgroud)
(
R> df1
x y
r1 1 1
r2 2 2
r3 3 3
R> df2
z
r5 5
r6 6
r7 7
Run Code Online (Sandbox Code Playgroud)
),我想通过行名称合并它们,保留所有内容(所以外连接,或全部= T).这样做:
merged.df <- merge(df1,df2,all=T,by='row.names')
R> merged.df
Row.names x y z
1 r1 1 1 NA
2 r2 2 2 NA
3 r3 3 3 NA
4 r5 NA NA 5
5 r6 NA NA 6
6 r7 NA NA 7
Run Code Online (Sandbox Code Playgroud)
但我希望输入行名称是输出数据框(merged.df)中的行名称.
我可以:
rownames(merged.df) <- merged.df[[1]]
merged.df <- merged.df[-1]
Run Code Online (Sandbox Code Playgroud)
这有效,但似乎不优雅,难以记住.有人知道更清洁的方式吗?
the*_*ail 16
不确定它是否更容易记住,但你可以一步到位地完成所有操作transform.
transform(merge(df1,df2,by=0,all=TRUE), row.names=Row.names, Row.names=NULL)
# x y z
#r1 1 1 NA
#r2 2 2 NA
#r3 3 3 NA
#r5 NA NA 5
#r6 NA NA 6
#r7 NA NA 7
Run Code Online (Sandbox Code Playgroud)
来自以下人员的帮助merge:
\n\n\n如果匹配涉及行名称,则在左侧添加一个名为\n Row.names 的额外字符列,并且在所有情况下结果都具有\n \xe2\x80\x98automatic\xe2\x80\x99 行名称。
\n
Row.names所以很明显,你至少不能使用 来避免该列merge。但也许要删除此列,您可以按名称而不是按索引进行子集化。例如:
dd <- merge(df1,df2,by=0,all=TRUE) ## by=0 easier to write than row.names , \n ## TRUE is cleaner than T\nRun Code Online (Sandbox Code Playgroud)\n\n然后我用row.names 这样的子集:
res <- subset(dd,select=-c(Row.names))\nrownames(res) <- dd[,'Row.names']\n x y z\n1 1 1 NA\n2 2 2 NA\n3 3 3 NA\n4 NA NA 5\n5 NA NA 6\n6 NA NA 7\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
10010 次 |
| 最近记录: |