我试图根据一个变量定义不同的组。这是一个简单的问题,但我无法弄清楚。
在我的数据集中,我为每棵树提供了许多独特的组(在“dist”变量中值为1)。我想创建一个新变量,它将为每个组分配唯一的独特值。
我的数据如下:
Tree_ID dist
1 0
1 1
1 1
1 0
1 1
1 0
我想创建一个新变量,它将分配给不同的组“dist == 1”唯一值(unique_gr)。
Tree_ID dist unique_gr
1 0 0
1 1 1
1 1 1
1 0 0
1 1 2
1 0 0
我试图使用“ifelse”函数检查当前行,当“dist == 0”表示没有组
ifelse(dist == 1, "unique_gr", 0) # checking the current row
主要问题是我如何在“unique_gr”中为每个不同的组指定不同/增加(例如1,2,3,4 ..)的唯一值?
感谢您的帮助。
答案 0 :(得分:2)
来自tidyverse
和data.table
的解决方案。关键是使用rleid
函数。
# Create example data frame
dt <- read.table(text = "Tree_ID dist
1 0
1 1
1 1
1 0
1 1
1 0 ",
header = TRUE, stringsAsFactors = FALSE)
library(tidyverse)
library(data.table)
dt2 <- dt %>%
mutate(unique_gr = rleid(dist)) %>%
mutate(unique_gr = ifelse(dist != 0 & first(dist) == 0, unique_gr/2,
ifelse(dist != 0 & first(dist) != 0, (unique_gr + 1)/2, 0)))
dt2
Tree_ID dist unique_gr
1 1 0 0
2 1 1 1
3 1 1 1
4 1 0 0
5 1 1 2
6 1 0 0
请注意,如果dist
的开头不是0
,此解决方案也会有效,如下例所示。
# Create example data frame with the beginning of dist is not 0
dt_1 <- read.table(text = "Tree_ID dist
1 1
1 1
1 1
1 0
1 1
1 0 ",
header = TRUE, stringsAsFactors = FALSE)
dt2_1 <- dt_1 %>%
mutate(unique_gr = rleid(dist)) %>%
mutate(unique_gr = ifelse(dist != 0 & first(dist) == 0, unique_gr/2,
ifelse(dist != 0 & first(dist) != 0, (unique_gr + 1)/2, 0)))
dt2_1
Tree_ID dist unique_gr
1 1 1 1
2 1 1 1
3 1 1 1
4 1 0 0
5 1 1 2
6 1 0 0
答案 1 :(得分:1)
以下是使用categoryModel
.find({})
.populate(
{path: 'subcategories', options: { sort: { '_id': -1 } } }
)
data.table