列对的组合但不是数据帧中的行

时间:2016-11-30 19:42:27

标签: r dataframe combinations

如何计算数据框中列对的组合,但限制它,以便它不考虑行之间的组合?

我有一个如下所示的数据框,其中每列都是一个变量。

ID A B C D E F G H I J
1   12  185 NA  NA  NA  NA  NA  NA  NA  NA
2   35  20  11  NA  NA  NA  NA  NA  NA  NA
3   45  NA  NA  NA  NA  NA  NA  NA  NA  NA

我想要这样的输出:

    Var1 
 12, 185
 35, 20
 35, 11
 20, 11
 45, 45

我尝试了以下代码,但它考虑了列和行之间所有可能的组合对。我希望每一行都能相互独立地考虑。有人有想法吗?谢谢。

numNetList <- read.csv2("abd.csv", sep=";")

comb <- lapply(numNetList, function(x) if (length(x) > 1) 
  combn(sort(as.numeric(x)), 2))
combb <- do.call(cbind, comb)

pajek_list <- as.data.frame(table(paste(combb[1,], combb[2,], sep = ',')))

2 个答案:

答案 0 :(得分:0)

不是有效的方法,但解决了问题

func <- function(x){
  t = as.character(x[!is.na(x)])
  if (length(t)==1) 
  t = rep(t,2)
  t1 = combn(t,2)
}

l = apply(df[-1], 1, func)
l1 <- as.data.frame(l)
colnames(l1) = NULL
l2= data.frame(t(l1))

library(tidyr)
unite(l2, "new_col", X1,X2 ,sep = ",")

#   new_col
#    12,185
#    35,20
#    35,11
#    20,11
#    45,45

答案 1 :(得分:0)

我会选择dplyrtidyr

的组合
library(dplyr)
library(tidyr)

df <- tibble(A = c(12,35,45), B = c(185, 20, NA), C = c(NA, 11, NA))

df %>% 
  mutate(group = 1:n()) %>% 
  gather(col, val, -group) %>% 
  group_by(group) %>% 
  expand(col, val) %>%  
  distinct(val) %>% 
  summarise(val = toString(val))