2017-03-17 79 views
0

我想列出與另一個變量的值相關的所有不同值。例如:R列出另一個變量的每個值的所有不同值

nums <- rep(1:3,5) 
nums2 <- 142:156 
numbers <- data.frame(sort(nums),nums2) 

     nums nums2 
1   1 142 
2   1 143 
3   1 144 
4   1 145 
5   1 146 
6   2 147 
7   2 148 
8   2 149 
9   2 150 
10   2 151 
11   3 152 
12   3 153 
13   3 154 
14   3 155 
15   3 156 

現在我想弄清楚如何列出nums2所有唯一值nums這樣的每一個獨特的價值,我可以得到像這樣的列表:

  nums values 
1   1 142,143,144,145,146 
2   2 147,148,149,150,151 
3   3 152,153,154,155,156 

任何幫助讚賞。

回答

3

您可以paste一起使用aggregate此:

aggregate(cbind(values=nums2) ~ nums, numbers, paste, collapse=",") 
    nums    values 
1 1 142,145,148,151,154 
2 2 143,146,149,152,155 
3 3 144,147,150,153,156 
+2

Thanks @RichScriven結果看起來更好的方式(即使cbind刪除一些可讀性) – HubertL

1
setNames(data.frame(do.call(rbind, lapply(split(numbers, numbers$sort.nums.), 
         function(a) c(a$sort.nums[1], paste(a$nums2, collapse = ", "))))), 
         nm = c("nums","values")) 
0

dplyr這看起來像:

numbers %>% group_by(sort.nums.) %>% summarise(values= paste(nums2,collapse=",")) 
+0

我不,如果它的用法不正確或什麼,但dplyr的'group_by'不是像我喜歡它(例如, stata的'bysort')。感謝您的貢獻,但它創建了1X1幀,列出了所有值。 – Neue1987

0

下面是使用選項data.table

library(data.table) 
unique(setDT(numbers))[, .(values = toString(nums2)), by = nums] 
# nums     values 
#1: 1 142, 143, 144, 145, 146 
#2: 2 147, 148, 149, 150, 151 
#3: 3 152, 153, 154, 155, 156 
相關問題