gpt4 book ai didi

r - 按一列分组并查看另一列长度不均匀的所有唯一结果

转载 作者:行者123 更新时间:2023-12-03 08:55:21 25 4
gpt4 key购买 nike

我想按所有唯一站点对数据框进行排序,并列出另一列中的所有值(不对这些值执行任何函数)。每个站点的值将具有不同的长度。我想保留这些值的数值,以便之后可以进行一些数据操作(例如箱线图等)。

我能够使用 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

*我不知道为什么它要四舍五入我的纬度/经度值。

我需要第三列是数字,而不是字符串。所以像这样的东西会起作用(注意 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 行只有一个值而不是两个值)。

提前谢谢您!

最佳答案

一种选择是嵌套这些值以使其保持数字

library(dplyr)

temp <- samp_data %>%
group_by(LAT, LONG) %>%
tidyr::nest(value)
temp

# LAT LONG data
# <dbl> <dbl> <list>
#1 41.1 -74.1 <tibble [5 × 1]>
#2 43.0 -75.0 <tibble [3 × 1]>
#3 43.2 -77.5 <tibble [2 × 1]>

这将有 data 列作为列表值,并且每个列都有一个名为 value 的数字列。

str(temp$data)
#List of 3
# $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 5 obs. of 1 variable:
# ..$ value: num [1:5] 89 36 20 26 35
# $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 3 obs. of 1 variable:
# ..$ value: num [1:3] 1 17 20
# $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2 obs. of 1 variable:
# ..$ value: num [1:2] 2 2

关于r - 按一列分组并查看另一列长度不均匀的所有唯一结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55886223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com