R 根据特定的行值将列添加到数据帧(2)
我必须调整一个代码,该代码在不同的data.frame下工作得很好,但条件类似 下面是我的data.frame示例: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
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