一个衬里用于两个向量的笛卡尔,其中集合的名称和字符串中的字符串AsFactors = FALSE

jmu*_*amp 0 merge r cartesian-product dplyr data.table

我想在R中做两个向量的笛卡儿

  1. 返回data.frame列名称
  2. 返回字符列而不是因子

我当然可以用几行代码来做这件事.

df <- merge(1:3, letters[1:3], all = TRUE)
colnames(df) <- c("number", "letter")
df$letter <- as.character(df$letter)
str(df)
## 'data.frame':    9 obs. of  2 variables:
##  $ number: int  1 2 3 1 2 3 1 2 3
##  $ letter: chr  "a" "a" "a" "b" ...
Run Code Online (Sandbox Code Playgroud)

但理想情况下,这将是一个单行,如下面的代码(不产生所需的输出).

df2 <- merge(c(number = 1:3),
             c(letter = letters[1:3]), all = TRUE, stringsAsFactors = FALSE)
str(df2)
## 'data.frame':    9 obs. of  2 variables:
##  $ x: int  1 2 3 1 2 3 1 2 3
##  $ y: Factor w/ 3 levels "a","b","c": 1 1 1 2 2 2 3 3 3
Run Code Online (Sandbox Code Playgroud)

任何人都有可以在这个代表上工作的单行?很高兴也有娱乐dplyr和data.table解决方案.每一个理想的解决方案将显示提供一个班轮base,dplyr和data.table.

Rol*_*and 5

help("merge") 说

参数

x,y数据帧或要强制转换为一个的对象.

这暗示了解决方案:

df2 <- merge(data.frame(number = 1:3),
             data.frame(letter = letters[1:3], stringsAsFactors = FALSE), all = TRUE)
str(df2)
#'data.frame':  9 obs. of  2 variables:
# $ number: int  1 2 3 1 2 3 1 2 3
# $ letter: chr  "a" "a" "a" "b" ...
Run Code Online (Sandbox Code Playgroud)