全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2258 10
2019-01-09
各位各位,我有个问题想请大家帮帮忙~~~

我现在想通过两个分组变量(id和group),选取layer中 中间的三个观测,我想的是先通过分组变量id和group计算layer中的中位数,然后把中位数向上取整,然后中位数加1,中位数减1,就可以确定中间的三个观测了,但是怎么用代码实现啊{:2_38:}

我想通过① group_by(id,group) %>% median(layer) ,然后报错
             ②subset(test, layer == ceiling(median(layer)) | layer == ceiling(median(layer))+1 | layer == ceiling(median(layer))-1),但是没有用到分组变量啊!!!
             ③还有用data.table包:test[,layer == ceiling(median(layer)) | layer == ceiling(median(layer))+1 | layer == ceiling(median(layer))-1,by = list(group,id)] 出来的结果也是报错

好(;′⌒`)桑心蓝过啊,附上我的数据!!!!
test.zip
大小:(254 Bytes)

 马上下载

本附件包括:

  • test.csv


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-1-9 20:50:53
当layer的长度是奇数的时候,中间三个观测很好确定,例如长度是9时,中间三个观测即为从小到大排列后排名第4,5,6的观测
当layer的长度是偶数的时候,我这里暂且定为,例如长度是8时,中间三个观测为从小到大排列后排名第3,4,5的观测

那么下面就可以分组后取中间三个观测
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-1-9 22:11:08
fyc7346165 发表于 2019-1-9 20:50
当layer的长度是奇数的时候,中间三个观测很好确定,例如长度是9时,中间三个观测即为从小到大排列后排名第 ...
嗯嗯,但是这样提取出来的Layer都被放到了变量x中,我想要的结果是如图排列的,这应该肿么办啊{:2_34:} outpput.png
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-1-10 06:19:44
试试下面的代码

复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-1-10 09:01:24
caimiao0714 发表于 2019-1-10 06:19
试试下面的代码
emmmm....我试了出来的不是我想要的结果,我的layer变量都是从1开始的整形变量。
而且我有两行代码不太明白,
一个是:absdif = abs(layer - med) 计算这个差值是为了什么啊?
另一个是:filter(row_number() %in% 1:3) 这是排序后选择前三行吗?有点不太懂····
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-1-10 09:20:44
我的理解:
absdif = abs(layer - med): 计算每组的layer和中值的距离。
arrange(id, group, absdif): 用距离排序(升序)
filter(row_number() %in% 1:3): 取距离最小的前3
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群