【发布时间】:2019-04-28 01:12:03
【问题描述】:
我想按所有唯一站点创建对我的数据框进行排序,并在另一列中列出所有值(不对这些值执行任何函数)。每个站点的值将具有不同的长度。我想保留数值,以便之后可以进行一些数据操作(例如箱线图等)。
我可以使用 tidyverse 并创建一串不均匀的字符。
样本数据
a<-data.frame(c(41.14542,41.14542,41.14542,41.14542,41.14542),
c(-74.1129,-74.1129,-74.1129,-74.1129,-74.1129), c(89,36,20,26,35))
colnames(a)<-c("LAT","LONG","value")
b<-data.frame(c(43.00309,43.00309,43.00309),
c(-75.02384,-75.02384,-75.02384), c(1,17,20))
colnames(b)<-c("LAT","LONG","value")
c<-data.frame(c(43.17203,43.17203), c(-77.52824,-77.52824), c(2,2))
colnames(c)<-c("LAT","LONG","value")
samp_data<-rbind(a,b,c)
我试过的代码
library(tidyverse)
samp<-samp_data %>% group_by(LAT, LONG) %>% mutate(value_string = paste(value, collapse = ",")) %>% select(LAT, LONG, value_string) %>% unique()
这给了我这个结果:
LAT LONG value_string
<dbl> <dbl> <chr>
1 41.1 -74.1 89,36,20,26,35
2 43.0 -75.0 1,17,20
3 43.2 -77.5 2,2
*我不知道为什么它会舍入我的 LAT/LONG 值。
我需要第三列是数字,而不是字符串。所以这样的事情会起作用(注意 value_string 的类):
LAT LONG value_string
<dbl> <dbl> <dbl>
1 41.1 -74.1 89,36,20,26,35
2 43.0 -75.0 1,17,20
3 43.2 -77.5 2,2
我查看了聚合(似乎需要应用一些函数),使用列表(每个站点的长度不均匀有问题),但无法让它们工作。
另外,我不想聚合,即站点 (43.17203,-77.52824) 需要出现两次,而不是被视为/组合为一行。所以这并不理想:
LAT LONG value_string
<dbl> <dbl> <chr>
1 41.1 -74.1 89,36,20,26,35
2 43.0 -75.0 1,17,20
3 43.2 -77.5 2
(第 3 行只有一个值而不是两个值)。
提前谢谢你!
【问题讨论】:
-
您的期望似乎自相矛盾。您想要独特的网站,同时还提到“不想聚合”。另外,当您希望变量列出所有值时,“我需要第三列是数字,而不是字符串”是什么意思。在
select声明之前,您的方法很好。 -
嗨@liuminzhao,很抱歉。我已经对我正在寻找的内容进行了更详细的解释。我只是看到,当你使用聚合时,你必须使用一些函数(即平均值,最大值),但我不希望那样。我想要该值列的原始值,而无需完成任何汇总统计。是选择问题吗?