R 如何将特定范围的列值转换为0和1
这是我的数据集,名为R 如何将特定范围的列值转换为0和1,r,dplyr,R,Dplyr,这是我的数据集,名为st > head(st) sales0 sales1 sales2 sales3 sales4 country State CouSub countytownname population 1: 848 588 666 1116 1133 9 23 19770 town 423 2: 925 717 780 1283 1550 1 50
st
> head(st)
sales0 sales1 sales2 sales3 sales4 country State CouSub countytownname population
1: 848 588 666 1116 1133 9 23 19770 town 423
2: 925 717 780 1283 1550 1 50 29575 town 298
3: 924 616 739 1154 1314 13 25 8470 town 3609
4: 924 646 683 1292 1297 35 6 99999 County 34895
5: 1017 730 735 1208 1326 27 50 60100 town 1139
6: 1494 1071 1196 1861 2023 9 25 37995 town 5136
state_alpha store_Type store data CN_AF CN_GL CN_MR CN_SZ SC_M SC_N AN_AF
1: ME Supermarket Type1 0 train 0 1 0 0 0 1 0
2: VT Supermarket Type1 0 train 1 0 0 0 0 1 0
3: MA Supermarket Type1 1 train 0 1 0 0 1 0 0
4: CA Supermarket Type3 0 train 0 1 0 0 0 1 1
5: VT Supermarket Type1 0 train 0 0 0 1 0 1 0
6: MA Supermarket Type3 0 train 1 0 0 0 1 0 0
相应的state_alpha
列的表格如下
> table(st$state_alpha)
AK AL AR AZ CA CO CT DC DE FL GA GU HI IA ID IL IN KS KY LA MA MD
29 67 75 15 58 64 169 1 3 67 159 1 5 99 44 102 92 105 120 64 351 25
ME MI MN MO MS MT NC ND NE NH NJ NM NV NY OH OK OR PA PR RI SC SD
535 83 87 116 82 56 100 53 93 259 21 33 17 62 88 77 36 67 78 39 46 66
TN TX UT VA VI VT WA WI WV WY
95 254 29 135 3 255 39 72 55 23
我想将这些值分组在一个范围内,就像0-100之间的值是1,大于100的值是0。但当我运行代码时,它显示所有的值都是0。有人能帮我用两种方法吗。升级后的两个代码都将是可观的
一,
st$state\u alpha=ifelse((st$state\u alpha>=0&st$state\u alpha表(st$state\u alpha)
0
4769
二,
st$state\u alpha=(st$state\u alpha表(st$state\u alpha)
0
4769
如果可能,请帮助我掌握这两种技术。任何答案都可能围绕
分组方式和案例进行操作。我需要可复制的数据(通过dput等),但解决方案可能如下所示:
library(dplyr)
st %>%
group_by(state_alpha) %>%
mutate(st_range = case_when(sum(state_alpha==state_alpha) <= 100 ~ 1, TRUE ~ 0)))
库(dplyr)
st%>%
分组依据(州阿尔法)%>%
突变(st_范围=情况_时)(总和(状态_α==状态_α)%
data.frame()%>%
mutate(Freq=case_when(Freq state_alpha)不是数字列,但您的表是在原始df“st”的列上操作的,其中state_alpha只是一个字符缩写。如果您使用dput提供可复制的样本数据,我可以帮助找出解决方案。错误:列st_range
必须是长度1(组大小),而不是0。第一个方法会引发此错误。第二个方法工作正常,但dataframe仅用两列替换整个表,即state_alpha和st_range。非常感谢您的帮助atleast@AniketRele我调整了第一个解决方案,再试一次。
st$state_alpha=(st$state_alpha<=100) + 0
> table(st$state_alpha)
0
4769
library(dplyr)
st %>%
group_by(state_alpha) %>%
mutate(st_range = case_when(sum(state_alpha==state_alpha) <= 100 ~ 1, TRUE ~ 0)))
library(dplyr)
library(magrittr)
st %$%
table(state_alpha) %>%
data.frame() %>%
mutate(Freq = case_when(Freq <= 100 ~ 1, TRUE ~ 0))