在一个单元格中的多个可分离(串联)值上加入 R 数据帧
Joining R dataframe on multiple separable (concatenated) values in one cell
我正在尝试找到一种方法来连接两个数据帧,而不是直接匹配(test<-inner_join(blood, behavior, by = c("IDy" = "IDx"))
)我希望能够将“1|3|546”分成单独的元素并匹配连接(如 '042' %in% '1|2|3|042')。我能想到的唯一方法是再创建 3 行,每个值都在新行 (1, 2, 3, 042) 上,但我宁愿将所有内容都放在一个单元格中。我不确定这是否是个疯狂的想法。
# Creating behavior dataframe
IDx <- c('1|3|546', '1|2|3|983', '1|2|3|042', '952', '853', '061')
diet <- c("veg", "pes", "omni", "omni", "omni", "omni")
exercise <- c("high", "low", "low", "low", "med", "high")
behavior <- data.frame(IDx, diet, exercise)
# Creating blood dataframe
IDy <- c('983', '952', '853', '061', '042', '581', '249', '467', '841', '546')
blood_levels <- c(43543, 465, 4634, 94568, 850, 6840, 5483, 66452, 54371, 1347)
blood <- data.frame(IDy, blood_levels)
我们可以使用 tidyr
中的 separate_rows
通过分隔符拆分行,然后使用 inner_join
library(dplyr)
library(tidyr)
behavior %>%
separate_rows(IDx) %>%
inner_join(blood, by = c("IDx" = "IDy"))
-输出
# A tibble: 6 x 4
# IDx diet exercise blood_levels
# <chr> <chr> <chr> <dbl>
#1 546 veg high 1347
#2 983 pes low 43543
#3 042 omni low 850
#4 952 omni low 465
#5 853 omni med 4634
#6 061 omni high 94568
我正在尝试找到一种方法来连接两个数据帧,而不是直接匹配(test<-inner_join(blood, behavior, by = c("IDy" = "IDx"))
)我希望能够将“1|3|546”分成单独的元素并匹配连接(如 '042' %in% '1|2|3|042')。我能想到的唯一方法是再创建 3 行,每个值都在新行 (1, 2, 3, 042) 上,但我宁愿将所有内容都放在一个单元格中。我不确定这是否是个疯狂的想法。
# Creating behavior dataframe
IDx <- c('1|3|546', '1|2|3|983', '1|2|3|042', '952', '853', '061')
diet <- c("veg", "pes", "omni", "omni", "omni", "omni")
exercise <- c("high", "low", "low", "low", "med", "high")
behavior <- data.frame(IDx, diet, exercise)
# Creating blood dataframe
IDy <- c('983', '952', '853', '061', '042', '581', '249', '467', '841', '546')
blood_levels <- c(43543, 465, 4634, 94568, 850, 6840, 5483, 66452, 54371, 1347)
blood <- data.frame(IDy, blood_levels)
我们可以使用 tidyr
中的 separate_rows
通过分隔符拆分行,然后使用 inner_join
library(dplyr)
library(tidyr)
behavior %>%
separate_rows(IDx) %>%
inner_join(blood, by = c("IDx" = "IDy"))
-输出
# A tibble: 6 x 4
# IDx diet exercise blood_levels
# <chr> <chr> <chr> <dbl>
#1 546 veg high 1347
#2 983 pes low 43543
#3 042 omni low 850
#4 952 omni low 465
#5 853 omni med 4634
#6 061 omni high 94568