基于行和列名的另一个DF中的一个DF中的2列中的查找值

发布于 2025-02-03 17:15:14 字数 2055 浏览 2 评论 0原文

我有一个数据框架,其中包括农业生产家庭调查的结果。数据包括每个单位代码,可以是数量,重量或区域的。我创建了一个查找表,该表具有每个作物类型和单元代码的转换。我想从查找表中查找转换因子,然后将其输入到调查数据框中。 Q14402_701 =农作物代码(153个代码,有许多不完整条目的NA值) Q14404_2_701 =作物单位代码(1:5,没有找到转换或不完整值的NA值

DF = farmHH_12_SUB:

  hhid      indid       q14402_701 q14404_2_701
  <chr>     <chr>            <dbl>        <dbl>
1 120100181 12010018102         1101         2
2 120100191 12010018101         1102         3
3 120101761 12010176103         NA           NA
4 120101771 12010176102         1101         NA
5 120101781 12010176101         1103         2
6 120102891 12010289105         NA           1

lookup = crop_code

code desc_en  1    2 3     4 NA
1 1101   Wheat NA 0.15 1 0.001 NA
2 1102   Maize NA 0.14 1 0.001 NA
3 1103 Sorghum NA 0.14 1 0.001 NA
4 1104     Rye NA   NA 1 0.001 NA
5 1105     Oat NA   NA 1 0.001 NA
6 1106  Millet NA   NA 1 0.001 NA

我尝试了多种方法,但最有前途的基于此 link

Farmhh_12_sub$crop_conversion<-left_join(
  Farmhh_12_sub%>% 
    mutate_if(is.double, as.character),
  Crop_code%>%
    mutate_if(is.factor, as.character)%>%
  pivot_longer(!c(code, desc_en), names_to = "q14404_2_701", values_to = "crop_conversion")%>%
  Crop_code[complete.cases(Crop_code), ],
  by=c("code"="q14402_701","q14404_2_701"="q14404_2_701"))

https://stackoverflow.com/questions/51469945/doing-a-ranged-logep-with-with-with-multiple-variables-in-a-a-matrix-in-r "

  hhid      indid       q14402_701 q14404_2_701  crop_conversion
  <chr>     <chr>            <dbl>        <dbl>       <dbl>
1 120100181 12010018102         1101         2          0.15
2 120100191 12010018101         1102         3          0.001
3 120101761 12010176103         NA           NA          NA
4 120101771 12010176102         1101         NA          NA 
5 120101781 12010176101         1103         2           0.14
6 120102891 12010289105         NA           1           NA

I have one dataframe which includes the results of a household survey for agricultural production. The data includes unit codes for each, which can be volume, weight or area based. I have created a lookup table that has a conversion for each crop type and unit code. I would like to lookup the conversion factor from the lookup table and input it into the survey dataframe.
q14402_701 = crop code (153 codes, with many NA values for incomplete entries)
q14404_2_701 = crop unit code(1:5, with many NA values where no conversion is found or incomplete values

df=farmhh_12_sub:

  hhid      indid       q14402_701 q14404_2_701
  <chr>     <chr>            <dbl>        <dbl>
1 120100181 12010018102         1101         2
2 120100191 12010018101         1102         3
3 120101761 12010176103         NA           NA
4 120101771 12010176102         1101         NA
5 120101781 12010176101         1103         2
6 120102891 12010289105         NA           1

lookup=crop_code

code desc_en  1    2 3     4 NA
1 1101   Wheat NA 0.15 1 0.001 NA
2 1102   Maize NA 0.14 1 0.001 NA
3 1103 Sorghum NA 0.14 1 0.001 NA
4 1104     Rye NA   NA 1 0.001 NA
5 1105     Oat NA   NA 1 0.001 NA
6 1106  Millet NA   NA 1 0.001 NA

I have tried a number of methodologies, but the most promising is based on this link.

Farmhh_12_sub$crop_conversion<-left_join(
  Farmhh_12_sub%>% 
    mutate_if(is.double, as.character),
  Crop_code%>%
    mutate_if(is.factor, as.character)%>%
  pivot_longer(!c(code, desc_en), names_to = "q14404_2_701", values_to = "crop_conversion")%>%
  Crop_code[complete.cases(Crop_code), ],
  by=c("code"="q14402_701","q14404_2_701"="q14404_2_701"))

desired output

  hhid      indid       q14402_701 q14404_2_701  crop_conversion
  <chr>     <chr>            <dbl>        <dbl>       <dbl>
1 120100181 12010018102         1101         2          0.15
2 120100191 12010018101         1102         3          0.001
3 120101761 12010176103         NA           NA          NA
4 120101771 12010176102         1101         NA          NA 
5 120101781 12010176101         1103         2           0.14
6 120102891 12010289105         NA           1           NA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

完美的未来在梦里 2025-02-10 17:15:14

如果我正确理解问题,我将把查找表转换为长表,然后使用lew_join()将表加入,

library(dplyr)

crop_code_long <- crop_code %>% 
  select(-desc_en) %>% # this column is not needed
  pivot_longer(-code, names_to = "crop_unit_code", values_to = "crop_conversion") %>% 
  mutate(crop_unit_code = as.numeric(crop_unit_code))

left_join(farmhh_12_sub, crop_code_long, by = c("q14402_701" = "code", "q14404_2_701" = "crop_unit_code"))

希望它有效并有所帮助。

If I understood the question correct, I would transform the lookup table to a long table and then join the tables with left_join()

library(dplyr)

crop_code_long <- crop_code %>% 
  select(-desc_en) %>% # this column is not needed
  pivot_longer(-code, names_to = "crop_unit_code", values_to = "crop_conversion") %>% 
  mutate(crop_unit_code = as.numeric(crop_unit_code))

left_join(farmhh_12_sub, crop_code_long, by = c("q14402_701" = "code", "q14404_2_701" = "crop_unit_code"))

Hope it works and helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文