我正在使用R编程语言。
我有以下数据集:
set.seed(123)
library(dplyr)
var1 = rnorm(10000, 100,100)
var2 = rnorm(10000, 100,100)
var3 = rnorm(10000, 100,100)
var4 = rnorm(10000, 100,100)
id = 1:10000
final = data.frame(id, var1, var2, var3, var4)
final = final %>%
mutate(class1 = case_when(var1 < mean(var1) ~ "A",
TRUE ~ "B")) %>%
mutate(class2 = case_when(var2 < mean(var2) ~ "C",
TRUE ~ "D"))
我想根据class 1和class 2的每个唯一组合计算var 3和var 4的十分位数。
据我所知,这意味着:
- 对于所有行WHERE class 1 = A AND class 2 = C,计算/分配var 3和var 4的十分位数
- 对于所有行(其中class 1 = A且class 2 = D),计算/分配var 3和var 4的十分位数
- 对于所有行WHERE class 1 = B AND class 2 = C,计算/分配var 3和var 4的十分位数
- 对于所有行WHERE class 1 = B AND class 2 = D,计算/分配var 3和var 4的十分位数
下面是我为此编写的R代码:
final = final %>%
group_by(class1, class2) %>%
mutate(class3 = case_when(ntile(var3, 10) == 1 ~ "one",
ntile(var3, 10) == 2 ~ "two",
ntile(var3, 10) == 3 ~ "three",
ntile(var3, 10) == 4 ~ "four",
ntile(var3, 10) == 5 ~ "five",
ntile(var3, 10) == 6 ~ "six",
ntile(var3, 10) == 7 ~ "seven",
ntile(var3, 10) == 8 ~ "eight",
ntile(var3, 10) == 9 ~ "nine",
ntile(var3, 10) == 10 ~ "ten")) %>%
mutate(class4 = case_when(ntile(var4, 10) == 1 ~ "one",
ntile(var4, 10) == 2 ~ "two",
ntile(var4, 10) == 3 ~ "three",
ntile(var4, 10) == 4 ~ "four",
ntile(var4, 10) == 5 ~ "five",
ntile(var4, 10) == 6 ~ "six",
ntile(var4, 10) == 7 ~ "seven",
ntile(var4, 10) == 8 ~ "eight",
ntile(var4, 10) == 9 ~ "nine",
ntile(var4, 10) == 10 ~ "ten"))
有人能告诉我我做得对不对吗
谢谢!
1条答案
按热度按时间wgx48brx1#
可以使用
english
轻松完成,而不是使用case_when