R内连接不同的数据类型

时间:2017-03-11 00:26:30

标签: sql r dplyr left-join

我想知道是否有一种方法或者可能是另一种使用SQL查询来操作数据帧的包,这样我就不必将数值变量转换为字符串/字符。

input_key <- c(9061,8680,1546,5376,9550,9909,3853,3732,9209)
output_data <- data.frame(input_key)

answer_product <- c("Water", "Bread",   "Soda", "Chips", "Chicken",     "Cheese",   "Chocolate",    "Donuts",   "Juice")
answer_data <- data.frame(cbind(input_key, answer_product), stringsAsFactors     = FALSE)

left_join(output_data,answer_data, by = "input_key")

1 个答案:

答案 0 :(得分:1)

来自dplyr的{​​{1}}函数也可以使用数值作为键。

我认为你的问题来自于&#39; cbind&#39;函数,因为它的输出是一个只能存储一种数据类型的矩阵。在您的情况下,数值将转换为char。 与matrix相反,data.frame可以存储不同类型的数据,例如列表。

形成代码,键列转换为char:

> str(answer_data)
'data.frame':   9 obs. of  2 variables:
 $ input_key     : chr  "9061" "8680" "1546" "5376" ...
 $ answer_product: chr  "Water" "Bread" "Soda" "Chips" ...

相反,如果您使用以下内容构造data.frame:

answer_data_2 <- data.frame(
  input_key = input_key,
  answer_product = answer_product,
  stringsAsFactors = FALSE
  )

键colunm保持数字

> str(answer_data_2)
'data.frame':   9 obs. of  2 variables:
 $ input_key     : num  9061 8680 1546 5376 9550 ...
 $ answer_product: chr  "Water" "Bread" "Soda" "Chips" ...

left_join(output_data,answer_data, by = "input_key")

使用数字键