合并了不同大小的数据框,但列 returns 'NA'
Merged differently sized dataframes but column returns 'NA'
我有两个数据框需要合并在一起。第一个叫做“rain_year”,第二个叫做“难民”。 rain_year (df1) 有一个名为“sum_precip”的列。难民 (df2) 有一个名为“难民”的列。
两个数据框都有共同的列“Year”和“origin”,这是我需要匹配的。 df1 的大小是 df2 的两倍多。
这里是 df1 的例子:
起源年份sum_precip
1951 阿富汗 315
1952 阿富汗 300
1953 阿富汗 280
以此类推,所有国家可追溯至 1951 年。
这里是 df2 的例子:
年出身难民
1951 阿富汗 500
1952 阿富汗 400
1953 阿富汗 350
等等所有国家回到 1951 年。
这两个数据框的大小不同,因为并非 df2 中的所有国家/地区在 1951 年至今的所有年份都产生了难民。因此,我预计在将 df1 合并到 df2 或将 df1 合并到 df2 时会有相当数量的 'NA'。
当我运行这段代码时:
refugee_rain <- join(refugee, rain_year)
它在 sum_precip 中创建了一个向量为“NA”的新数据框。换句话说,添加了正确的列,但缺少所有值。
当我运行这段代码时:
refugee_rain <- join(refugee, rain_year)
同样的事情发生了。
当我颠倒数据框的顺序时,“难民”列做同样的事情。也就是说,有一列标记为“难民”,但它是一个“NA”向量而不是数值。
我花了好几个小时四处寻找解决方案。我尝试了几种变体,包括“all=T”。这是行不通的。请帮忙。
是我能找到的最接近的,其他人也有类似的问题。但是,建议的解决方案对我不起作用。
根据其他人的建议,我有 运行 返回以下内容的 dput 操作:
> dput(head(refugee, 5))
structure(list(Year = 1979:1983, origin = c("Afghanistan", "Afghanistan",
"Afghanistan", "Afghanistan", "Afghanistan"), ISO = c("", "",
"", "", ""), asylum = c("-", "-", "-", "-", "-"), asylum_ISO = c("-",
"-", "-", "-", "-"), refugees = c(2116011L, 1952928L, 1847304L,
1749628L, 1717966L), asylum_seekers = c(0L, 0L, 0L, 0L, 0L),
IDP = c(0L, 0L, 0L, 0L, 0L), Ven_displaced = c(NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_)), class = c("data.table",
"data.frame"), row.names = c(NA, -5L), .internal.selfref = <pointer: 0x000001ff790e1ef0>)
> dput(head(rain_year, 5))
structure(list(Year = c(1951L, 1951L, 1951L, 1951L, 1951L), origin = c(" Afghanistan",
" Albania", " Algeria", " Andorra", " Angola"), sum_precip = c(314.98117,
1077.5157, 99.31164, 1012.9107, 1181.94411)), row.names = c(NA,
-5L), groups = structure(list(Year = 1951:2016, .rows = structure(list(
1:195, 196:390, 391:585, 586:780, 781:975, 976:1170, 1171:1365,
1366:1560, 1561:1755, 1756:1950, 1951:2145, 2146:2340, 2341:2535,
2536:2730, 2731:2925, 2926:3120, 3121:3315, 3316:3510, 3511:3705,
3706:3900, 3901:4095, 4096:4290, 4291:4485, 4486:4680, 4681:4875,
4876:5070, 5071:5265, 5266:5460, 5461:5655, 5656:5850, 5851:6045,
6046:6240, 6241:6435, 6436:6630, 6631:6825, 6826:7020, 7021:7215,
7216:7410, 7411:7605, 7606:7800, 7801:7995, 7996:8190, 8191:8385,
8386:8580, 8581:8775, 8776:8970, 8971:9165, 9166:9360, 9361:9555,
9556:9750, 9751:9945, 9946:10140, 10141:10335, 10336:10530,
10531:10725, 10726:10920, 10921:11115, 11116:11310, 11311:11505,
11506:11700, 11701:11895, 11896:12090, 12091:12285, 12286:12480,
12481:12675, 12676:12870), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -66L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x000001ff790e1ef0>)
我不确定我在看什么,如果这不是 post 的正确格式,我深表歉意。
这个很难发现:
看到 refugee
中的国家名称是“阿富汗”,而在 rain_year
中是“阿富汗”:前面有一个 space A.
你可以这样解决:
library(stringi)
rain_year[, origin := stri_trim_both(origin)]
然后执行合并:
refuggee_rainYear <- merge(refugee, rain_year, by = c("Year", "origin"))
我有两个数据框需要合并在一起。第一个叫做“rain_year”,第二个叫做“难民”。 rain_year (df1) 有一个名为“sum_precip”的列。难民 (df2) 有一个名为“难民”的列。
两个数据框都有共同的列“Year”和“origin”,这是我需要匹配的。 df1 的大小是 df2 的两倍多。
这里是 df1 的例子:
起源年份sum_precip
1951 阿富汗 315
1952 阿富汗 300
1953 阿富汗 280
以此类推,所有国家可追溯至 1951 年。
这里是 df2 的例子:
年出身难民
1951 阿富汗 500
1952 阿富汗 400
1953 阿富汗 350
等等所有国家回到 1951 年。
这两个数据框的大小不同,因为并非 df2 中的所有国家/地区在 1951 年至今的所有年份都产生了难民。因此,我预计在将 df1 合并到 df2 或将 df1 合并到 df2 时会有相当数量的 'NA'。
当我运行这段代码时:
refugee_rain <- join(refugee, rain_year)
它在 sum_precip 中创建了一个向量为“NA”的新数据框。换句话说,添加了正确的列,但缺少所有值。
当我运行这段代码时:
refugee_rain <- join(refugee, rain_year)
同样的事情发生了。
当我颠倒数据框的顺序时,“难民”列做同样的事情。也就是说,有一列标记为“难民”,但它是一个“NA”向量而不是数值。
我花了好几个小时四处寻找解决方案。我尝试了几种变体,包括“all=T”。这是行不通的。请帮忙。
根据其他人的建议,我有 运行 返回以下内容的 dput 操作:
> dput(head(refugee, 5))
structure(list(Year = 1979:1983, origin = c("Afghanistan", "Afghanistan",
"Afghanistan", "Afghanistan", "Afghanistan"), ISO = c("", "",
"", "", ""), asylum = c("-", "-", "-", "-", "-"), asylum_ISO = c("-",
"-", "-", "-", "-"), refugees = c(2116011L, 1952928L, 1847304L,
1749628L, 1717966L), asylum_seekers = c(0L, 0L, 0L, 0L, 0L),
IDP = c(0L, 0L, 0L, 0L, 0L), Ven_displaced = c(NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_)), class = c("data.table",
"data.frame"), row.names = c(NA, -5L), .internal.selfref = <pointer: 0x000001ff790e1ef0>)
> dput(head(rain_year, 5))
structure(list(Year = c(1951L, 1951L, 1951L, 1951L, 1951L), origin = c(" Afghanistan",
" Albania", " Algeria", " Andorra", " Angola"), sum_precip = c(314.98117,
1077.5157, 99.31164, 1012.9107, 1181.94411)), row.names = c(NA,
-5L), groups = structure(list(Year = 1951:2016, .rows = structure(list(
1:195, 196:390, 391:585, 586:780, 781:975, 976:1170, 1171:1365,
1366:1560, 1561:1755, 1756:1950, 1951:2145, 2146:2340, 2341:2535,
2536:2730, 2731:2925, 2926:3120, 3121:3315, 3316:3510, 3511:3705,
3706:3900, 3901:4095, 4096:4290, 4291:4485, 4486:4680, 4681:4875,
4876:5070, 5071:5265, 5266:5460, 5461:5655, 5656:5850, 5851:6045,
6046:6240, 6241:6435, 6436:6630, 6631:6825, 6826:7020, 7021:7215,
7216:7410, 7411:7605, 7606:7800, 7801:7995, 7996:8190, 8191:8385,
8386:8580, 8581:8775, 8776:8970, 8971:9165, 9166:9360, 9361:9555,
9556:9750, 9751:9945, 9946:10140, 10141:10335, 10336:10530,
10531:10725, 10726:10920, 10921:11115, 11116:11310, 11311:11505,
11506:11700, 11701:11895, 11896:12090, 12091:12285, 12286:12480,
12481:12675, 12676:12870), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -66L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x000001ff790e1ef0>)
我不确定我在看什么,如果这不是 post 的正确格式,我深表歉意。
这个很难发现:
看到 refugee
中的国家名称是“阿富汗”,而在 rain_year
中是“阿富汗”:前面有一个 space A.
你可以这样解决:
library(stringi)
rain_year[, origin := stri_trim_both(origin)]
然后执行合并:
refuggee_rainYear <- merge(refugee, rain_year, by = c("Year", "origin"))