• R语言
  • 这样用merge()错了么?

如题:合并两个数据框,按相同列。。。但merge()一直出错,求解答:

<br />
> b<br />
      variable                                  brief  Stress<br />
1   GSM159259   7-day-old Seedling, biological rep 1       CK<br />
2   GSM159260   7-day-old Seedling, biological rep 2       CK<br />
3   GSM159261   7-day-old Seedling, biological rep 3       CK<br />
4   GSM159262   Drought stress, biological rep 1      Drought<br />
5   GSM159263   Drought stress, biological rep 2      Drought<br />
6   GSM159264   Drought stress, biological rep 3      Drought<br />
7   GSM159265   Salt stress, biological rep 1            Salt<br />
8   GSM159266   Salt stress, biological rep 2            Salt<br />
9   GSM159267   Salt stress, biological rep 3            Salt<br />
10  GSM159268   Cold stress, biological rep 1            Cold<br />
11  GSM159269   Cold stress, biological rep 2            Cold<br />
12  GSM159270   Cold stress, biological rep 3            Cold<br />
> a<br />
    variable value<br />
1  GSM159259   1.8<br />
2  GSM159260   6.8<br />
3  GSM159261   3.2<br />
4  GSM159262   1.1<br />
5  GSM159263   1.4<br />
6  GSM159264   1.7<br />
7  GSM159265   1.3<br />
8  GSM159266   1.5<br />
9  GSM159267   4.8<br />
10 GSM159268   1.1<br />
11 GSM159269   1.4<br />
12 GSM159270   1.7<br />
> merge(a,b)<br />
[1] variable value    brief    Stress<br />
<0 rows> (or 0-length row.names)<br />
> merge(a,b,all.x=TRUE)<br />
    variable value brief Stress<br />
1  GSM159259   1.8  <NA>   <NA><br />
2  GSM159260   6.8  <NA>   <NA><br />
3  GSM159261   3.2  <NA>   <NA><br />
4  GSM159262   1.1  <NA>   <NA><br />
5  GSM159263   1.4  <NA>   <NA><br />
6  GSM159264   1.7  <NA>   <NA><br />
7  GSM159265   1.3  <NA>   <NA><br />
8  GSM159266   1.5  <NA>   <NA><br />
9  GSM159267   4.8  <NA>   <NA><br />
10 GSM159268   1.1  <NA>   <NA><br />
11 GSM159269   1.4  <NA>   <NA><br />
12 GSM159270   1.7  <NA>   <NA><br />


不知道出了啥差错,或者用错函数了?求大神解答。。。[s:15]

就是按照variable列合并。。。</p>

PS:这是原始数据:谢谢楼下的causu~~~又学到了一个函数。。。哈哈哈

<br />
> dput(a)<br />
structure(list(variable = structure(1:12, .Label = c("GSM159259",<br />
"GSM159260", "GSM159261", "GSM159262", "GSM159263", "GSM159264",<br />
"GSM159265", "GSM159266", "GSM159267", "GSM159268", "GSM159269",<br />
"GSM159270"), class = "factor"), value = c(1.8, 6.8, 3.2, 1.1,<br />
1.4, 1.7, 1.3, 1.5, 4.8, 1.1, 1.4, 1.7)), .Names = c("variable",<br />
"value"), class = "data.frame", row.names = c(NA, -12L))<br />
> dput(b)<br />
structure(list(variable = structure(1:12, .Label = c(" GSM159259 ",<br />
" GSM159260 ", " GSM159261 ", " GSM159262 ", " GSM159263 ", " GSM159264 ",<br />
" GSM159265 ", " GSM159266 ", " GSM159267 ", " GSM159268 ", " GSM159269 ",<br />
" GSM159270 "), class = "factor"), brief = structure(c(1L, 2L,<br />
3L, 7L, 8L, 9L, 10L, 11L, 12L, 4L, 5L, 6L), .Label = c(" 7-day-old Seedling, biological rep 1 ",<br />
" 7-day-old Seedling, biological rep 2 ", " 7-day-old Seedling, biological rep 3 ",<br />
" Cold stress, biological rep 1        ", " Cold stress, biological rep 2        ",<br />
" Cold stress, biological rep 3        ", " Drought stress, biological rep 1     ",<br />
" Drought stress, biological rep 2     ", " Drought stress, biological rep 3     ",<br />
" Salt stress, biological rep 1        ", " Salt stress, biological rep 2        ",<br />
" Salt stress, biological rep 3        "), class = "factor"),<br />
    Stress = c("CK", "CK", "CK", "Drought", "Drought", "Drought",<br />
    "Salt", "Salt", "Salt", "Cold", "Cold", "Cold")), .Names = c("variable",<br />
"brief", "Stress"), row.names = c(NA, -12L), class = "data.frame")<br />
</p>

回复 第1楼 的 bemyselfcc:为了方便你的实例容易被大家直接复制,放到R中去运行,建议将数据dput(a)一下,然后将dput的结果粘过来就可以了。。。

"Variable"是factor? 变为Character后试试.

目测b的" GSM159259 "比a的"GSM159259"两端多了空格。另外同意楼上的意见,可以先转为character,再把b的variable两端的空格trim掉。

回复 第3楼 的 YSU:

不行:

我用:a$variable <- as.character(a$variable)

b$variable <- as.character(b$variable)

之后再换用merge(a,b),仍然是上面的结果。。。[s:15]

回复 第5楼 的 bemyselfcc:用stringr::str_trim删掉空格试试。

回复 第6楼 的 warrenzhang:

可以用了merge()了。。。用:

a$variable <- str_trim(as.character(a$variable))

b$variable <- str_trim(as.character(b$variable))

呜呜呜,好感动。。。尼玛,几个空格就害我困顿了一天。。。

不知道怎么预防。。。

这种错误真的防不胜防。。。

谢谢了。。。[s:11]