R 根据特定的行值将列添加到数据帧(2)

R 根据特定的行值将列添加到数据帧(2),r,dataframe,add,R,Dataframe,Add,我必须调整一个代码,该代码在不同的data.frame下工作得很好,但条件类似 下面是我的data.frame示例: df <- read.table(text = 'ID Day Count 33012 9526 4 35004 9526 4 37006 9526 4 37008 9526 4 21009 1913 3 24005 1913 3 25009 191

我必须调整一个代码,该代码在不同的data.frame下工作得很好,但条件类似

下面是我的data.frame示例:

df <- read.table(text = 'ID    Day Count
    33012   9526    4
    35004   9526    4
    37006   9526    4
    37008   9526    4
    21009   1913    3
    24005   1913    3
    25009   1913    3
    22317   2286    2
    37612   2286    2
    25009   14329   1
    48007   9527    0
    88662   9528    0
    1845    9528    0
    8872    2287    0
    49002   1914    0
    1664    1915    0', header = TRUE)
然后,
new\u col
订购的data.frame将为:

   ID    Day Count  new_col
33012   9526    4     1
35004   9526    4     1
37006   9526    4     1
37008   9526    4     1
48007   9527    0     1
88662   9528    0     1
1845    9528    0     1
21009   1913    3     2
24005   1913    3     2
25009   1913    3     2
49002   1914    0     2
1664    1915    0     2
22317   2286    2     3
37612   2286    2     3
8872    2287    0     3
25009   14329   1     4
我的real data.frame比示例更复杂(即
Count
列中有更多列和更多值)

@mrbrick在上一个问题()中建议我使用的代码如下:

   ID    Day Count  new_col
33012   9526    4     1
35004   9526    4     1
37006   9526    4     1
37008   9526    4     1
21009   1913    3     2
24005   1913    3     2
25009   1913    3     2
22317   2286    2     3
37612   2286    2     3
25009   14329   1     4
48007   9527    0     1
88662   9528    0     1
1845    9528    0     1
8872    2287    0     3
49002   1914    0     2
1664    1915    0     2
x <- c(1913, 2286, 9526, 14329) 
df$new_col <- cut(df$Day, c(-Inf, x, Inf))
df$new_col <- as.numeric(factor(df$new_col, levels=unique(df$new_col)))

x假设不同序列组中的
Day
值是这样的,即去掉
Day
的最后两个数字,就可以识别每个组,将剩下的转换成以序列号为标签的因子。没有使用任何软件包

 g <- df$Day %/% 100
 u <- unique(g)
 transform(df, new_col = factor(g, levels = u, labels = seq_along(u)))

另一种可能性是使用base R替换
g,您可以创建一个带有ID列的data.frame,日期为您想要的日期(
x
x+1
x+2
),并使用您想要的
新列,然后将此data.frame与原始数据.frame合并

如果你提前知道你的
x
一天,那就行了

df 11 9526 37006 4 1
#> 12  9526 37008     4       1
#> 13  9527 48007     0       1
#> 14  9528 88662     0       1
#> 15  9528  1845     0       1
#> 1   1913 21009     3       2
#> 2   1913 24005     3       2
#> 3   1913 25009     3       2
#> 4   1914 49002     0       2
#> 5   1915  1664     0       2
#> 6   2286 22317     2       3
#> 7   2286 37612     2       3
#> 8   2287  8872     0       3
#> 16 14329 25009     1       4

在cut命令中尝试
df$new\u col您是否有更多的
df$Day
值?属于不同组的值是否总是彼此非常遥远?您是否知道要在
列中显示的所有
x
      ID   Day Count new_col
1  33012  9526     4       1
2  35004  9526     4       1
3  37006  9526     4       1
4  37008  9526     4       1
5  21009  1913     3       2
6  24005  1913     3       2
7  25009  1913     3       2
8  22317  2286     2       3
9  37612  2286     2       3
10 25009 14329     1       4
11 48007  9527     0       1
12 88662  9528     0       1
13  1845  9528     0       1
14  8872  2287     0       3
15 49002  1914     0       2
16  1664  1915     0       2
g <- kmeans(df$Day, 4)$cluster
centers <-  c(1913, 2286, 9526, 14329) + 1
g <- kmeans(df$day, centers)$cluster
centers <- with(df, unique(Day[ ! ((Day-1) %in% Day) & ! ((Day-2) %in% Day) ]) + 1)
g <- kmeans(df$Day, centers)$cluster
# assumes x, x+1, x+2 all appear for each sequence
centers <- with(df, unique(Day[ ! (Day-1) %in% Day ]) + 1)
g <- kmeans(df$Day, centers)$cluster