我是R的新手,目前正在R中处理一个数据框,如下所示。
City p54_1 p54_2 p54_3 p54_4 p54_5 p54_6 p54_7 p54_8 p54_9 p54_10 p54_11 p54_12
19 Apodaca 0 0 1 1 1 1 1 0 0 0 1 1
46 Apodaca 0 0 1 1 1 1 1 1 1 1 1 1
51 Apodaca 1 0 1 1 0 0 0 0 0 0 0 0
57 Apodaca 0 0 1 0 0 0 0 0 0 0 0 0
86 Apodaca 1 1 1 1 1 1 1 1 1 1 1 1
89 Apodaca 1 0 0 0 1 1 1 0 0 0 1 0
p54_13 p54_14
19 0 1
46 0 1
51 0 0
57 0 0
86 1 1
89 1 1
我正在处理几个城市和与它们相关的列。所有这些列都有编码的值,即0、1、8或9。我试图找出每个城市以及每个城市名称的所有列和行中有多少个“1“。
但是,我尝试的大多数R代码主要集中在分析和比较各个列,例如
nrow(subset(dataframe, City == "Apodaca" & p54_1 == 9)) for example,
或汇总其他数据点,如以下代码:
EAV21 %>% group_by(City) %>% summarise(cnt = n()) %>% mutate(freq = formattable::percent (cnt/sum(cnt)))
其中显示以下内容
A tibble: 11 × 3
City cnt freq
<chr> <int> <formttbl>
1 Apodaca 351 9.06%
2 Cadereyta Jiménez 353 9.11%
3 García 354 9.13%
4 General Escobedo 354 9.13%
5 Guadalupe 354 9.13%
6 Juárez 354 9.13%
7 Monterrey 354 9.13%
8 San Nicolás de los Garza 354 9.13%
9 San Pedro Garza García 346 8.93%
10 Santa Catarina 354 9.13%
11 Santiago 348 8.98%
这个表对于其他分析来说是相当庞大的,但是它没有显示每个城市的观测总量(“Municipio”;它只显示城市名称每次出现在数据框中的总数),但它接近我试图获得的结果。
我尝试过对每个城市名、每个列名和每个值重复nrow(subset(dataframe,City ==“cityname”& columnname == value)),并将这些结果添加到我自己在R中创建的变量中。虽然这肯定是可行的,但我确信一定有一种更干净的方法来计算我所寻求的。
什么样的代码可以让我获得每个城市名称行中出现的“0“和“1”的数量,以及p54_1到p54_14列中出现的“0”和“1”的数量,以获得它们的频率百分比?
3条答案
按热度按时间bis0qfac1#
我们可以这样做:
以长格式导入数据,然后使用
count
:bqf10yzr2#
假设您的 Dataframe 名为
df
,则可能的解决方案如下:qlzsbp2j3#
您可以将
across()
与dplyr
一起使用来跨列执行操作。例如,您可以接着使用
%>% group_by(City)
将各行的计数相加,等等。