生成数据帧的组合,而不在数据帧中组合列(在r中)
我将扩展到数据帧之间的所有行组合,但不在数据帧内的列之间扩展。下面是一个示例,说明我当前如何实现此生成数据帧的组合,而不在数据帧中组合列(在r中),r,performance,combinations,R,Performance,Combinations,我将扩展到数据帧之间的所有行组合,但不在数据帧内的列之间扩展。下面是一个示例,说明我当前如何实现此在此处输入代码: df_1 <- data.frame(letters = letters[1:2], LETTERS = LETTERS[1:2], greek = c("alpha", "beta"), GREEK = c("ALPHA", "BETA"),
在此处输入代码
:
df_1 <- data.frame(letters = letters[1:2],
LETTERS = LETTERS[1:2],
greek = c("alpha", "beta"),
GREEK = c("ALPHA", "BETA"),
stringsAsFactors = F)
df_2 <- data.frame(numbers = c("one", "two"),
nums = 1:2,
imaginary = paste0(1:2, "i"),
stringsAsFactors = F)
result <- expand.grid(letters = df_1$letters, numbers = df_2$numbers,
stringsAsFactors = F)
for(n in 1:nrow(df_1)){
matching_rows <- df_1[n,"letters"]==result$letters
for(column in colnames(df_1)[-1]){
result[matching_rows, column] <- df_1[n,column]
}
}
for(n in 1:nrow(df_2)){
matching_rows <- df_2[n,"numbers"]==result$numbers
for(column in colnames(df_2)[-1]){
result[matching_rows, column] <- df_2[n,column]
}
}
> result
letters numbers LETTERS greek GREEK nums imaginary
1 a one A alpha ALPHA 1 1i
2 b one B beta BETA 1 1i
3 a two A alpha ALPHA 2 2i
4 b two B beta BETA 2 2i
df_1试试这个
> merge(df_1, df_2)
letters LETTERS greek GREEK numbers nums imaginary
1 a A alpha ALPHA one 1 1i
2 b B beta BETA one 1 1i
3 a A alpha ALPHA two 2 2i
4 b B beta BETA two 2 2i
您可以对行索引使用expand.grid()
:
ind <- expand.grid(seq_len(nrow(df_1)), seq_len(nrow(df_2)))
cbind(df_1[ind$Var1, ], df_2[ind$Var2, ])
ind