我有一个长格式的数据帧,我想根据值的唯一组合过滤对.我有一个如下所示的数据集:
id <- rep(1:4, each=2)
type <- c("blue", "blue", "red", "yellow", "blue", "red", "red", "yellow")
df <- data.frame(id,type)
df
id type
1 1 blue
2 1 blue
3 2 red
4 2 yellow
5 3 blue
6 3 red
7 4 red
8 4 yellow
Run Code Online (Sandbox Code Playgroud)
假设每个id都是一个响应者,type是一种治疗组合.个人1看到两个物体,都是蓝色的; 个人2看到一个红色物体和一个黄色物体; 等等.
例如,如何看到那些看到"红色"和"黄色"组合的东西?如果我按"红色"和"黄色"组合过滤,结果数据集应如下所示:
id type
3 2 red
4 2 yellow
7 4 red
8 4 yellow
Run Code Online (Sandbox Code Playgroud)
它应该保留2号和4号受访者(只有那些看到"红色"和"黄色"组合的受访者).请注意,它不会保留第3号受访者,因为她看到"蓝色"和"红色"(而不是"红色"和"黄色").我该怎么做呢?
一种解决方案是将数据集重新整形为宽格式,按列过滤,然后重新进行重新打包.但我相信还有另一种方法可以在不重塑数据集的情况下完成.任何的想法?
我有一组 UTM 度量点,我想使用 sf 环境将其转换为纬度和经度小数点。
我的数据集如下所示:
df <- data.frame(longitude=c(4585434,4588904,4586694),
latitude=c(430060.8,430960.8,432427.2),
street=c("74 JOSEP SERRANO", "30 LLOBERA","4 SANT ILDEFONS"),
number=c(45,68,34))
Run Code Online (Sandbox Code Playgroud)
我只能在sp框架下做到这一点。
dfevpo <- SpatialPoints(df[, c("longitude","latitude")], proj4string=CRS("+proj=utm +zone=10"))
longlats <- spTransform(dfevpo, CRS("+proj=longlat")) #transform
longlats.df <- as.data.frame(longlats)
longlats.df$.id <- as.numeric(rownames(longlats.df))
Run Code Online (Sandbox Code Playgroud)
但是,生成的longlats.df数据集并不包含原始数据集中的所有变量。我猜顺序是一样的,我可以将它与原来的合并。但是,有更直观的方法吗?理想情况下,我想使用 sf。