我有以下数据框:
df <- as.data.frame(c(sort(rep(1:12, 4))))
colnames(df) <- c("A")
df
我希望创建一个新列('B'),将1分配给df$A == 1:3
的行,将2分配给df$A == 4:6
的行,将3分配给df$A == 7:9
的行,等等。结果应如下所示:
df <- as.data.frame(c(sort(rep(1:12, 4))))
colnames(df) <- c("A")
df$B <- c(sort(rep(1:4, 12)))
df
这很重要:我不知道df$A
列中有多少个值等于1、2、3等。此外,df$A == 1
和{{ 1}}不一定相等。
我知道我可以通过执行以下操作来解决此问题:
df$A == 2
还有什么其他方法可以解决此问题?谢谢!
答案 0 :(得分:0)
还有什么其他方法可以解决此问题?谢谢!
您可以使用%/%
功能
df <- data.frame(A = 1:12)
str(df)
#R 'data.frame': 12 obs. of 1 variable:
#R $ A: int 1 2 3 4 5 6 7 8 9 10 ...
df$B <- 1L + (df$A - 1L) %/% 3L
str(df)
#R 'data.frame': 12 obs. of 2 variables:
#R $ A: int 1 2 3 4 5 6 7 8 9 10 ...
#R $ B: int 1 1 1 2 2 2 3 3 3 4 ...
请确保使用整数,因为您可以在help("%/%")
x %/% y
可用于非整数y
,例如1 %/% 0.2
,但结果容易出现表示错误,因此可能与平台有关。由于0.2
的IEC 60059表示形式是比0.2
稍大的二进制分数,因此1 %/% 0.2
的答案应该是4
,但是大多数平台都给出了5
。 / p>
答案 1 :(得分:0)
如果from bottle import route, request, response, template
@route('/forum')
def display_forum():
forum_id = request.query.id
page = request.query.page or '1'
return template('Forum ID: {{id}} (page {{page}})', id=forum_id, page=page)
打算将解决方案用作OP
链的一部分,而不是使用dplyr
,则%%
和%/%
可以是以下另一种选择:>
tidyr::fill