我有两个数据框
>cat a1.txt "501" 5.7916 6.9861 "502" 24.9444 18.45 "503" 4 4.7222 5.5 "505" 5 5.2777 5.3 >cat a2.txt 501 "alex" 502 "brian" 503 "romeo" 504 "tango" 505 "zee"
我希望能够替换a1.txt中的第一列,并使用来自a2.txt(查找)的相应值
我想要像 -
这样的东西alex 5.7916 6.9861 brian 24.9444 18.45 romeo 4 4.7222 5.5 zee 5 5.2777 5.3
我试过了 -
a1t <- read.table('a1.txt')
a2t <- read.table('a2.txt')
a1t
V1 V2 V3
1 501 5.7916 6.9861
2 502 24.9444 18.4500
3 503 4.0000 4.7222
4 505 5.0000 5.2777
> a2t
V1 V2
1 501 alex
2 502 brian
3 503 romeo
4 504 tango
5 505 zee
> merge(x=a1t, y=a2t,by='V1', all.x=TRUE)
V1 V2.x V3 V2.y
1 501 5.7916 6.9861 alex
2 502 24.9444 18.4500 brian
3 503 4.0000 4.7222 romeo
4 505 5.0000 5.2777 zee
但这并没有取代第一栏。它增加了一个额外的列。 如何获得上述所需格式?
如果我的a1.txt不平衡怎么办?即它中的列数在所有行中是不一致的?
答案 0 :(得分:2)
您可以选择您想要的内容:
#you are getting all lines and columns 4, 2 and 3
merge(x=a1t, y=a2t,by='V1', all.x=TRUE)[,c(4,2,3)]
#this will give the data.frame you wanted, that is:
V2.y V2.x V3
1 alex 5.7916 6.9861
2 brian 24.9444 18.4500
3 romeo 4.0000 4.7222
4 zee 5.0000 5.2777
或者,如果您反转合并,则可以只排除第一列:
merge(x=a2t, y=a1t,by='V1', all.y=TRUE)[,-c(1)]
##This will give:
V2.x V2.y V3
1 alex 5.7916 6.9861
2 brian 24.9444 18.4500
3 romeo 4.0000 4.7222
4 zee 5.0000 5.2777
你问:
如果我的a1.txt不平衡怎么办?即它中的列数在所有行中是不一致的?
我不确定你的意思,但如果你的意思是你没有对某些人的某些变量进行一些观察,那就加上NA。