[英]count occurrences across columns and match to ID column
我有 100 多列的 df,但並非全部都已填充
> head(othertopics,20)
# A tibble: 20 x 118
Q6 Q10.1 Q10.2 Q10.3 Q10.4 Q10.5 Q10.6 Q10.7 Q10.8 Q10.9 Q10.10 Q10.11 Q10.12 Q10.13
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 52 NA NA NA NA NA NA NA NA NA NA NA NA NA
2 294 NA NA NA NA NA NA NA NA NA NA NA NA NA
3 103 NA NA NA NA NA NA NA NA NA NA NA NA NA
4 52 NA NA NA NA NA NA NA NA NA NA NA NA NA
5 87 NA NA NA NA NA NA NA NA NA NA NA NA NA
6 52 NA NA NA NA NA NA NA NA NA NA NA NA NA
7 136 NA NA NA NA NA NA NA NA NA NA NA NA NA
8 19 NA NA NA NA NA NA NA NA NA NA NA NA NA
9 19 NA NA NA NA NA NA NA NA NA NA NA NA NA
10 0 NA NA NA NA NA NA NA NA NA NA NA NA NA
11 0 NA NA NA NA NA NA NA NA NA NA NA NA NA
12 19 NA NA NA 4 NA NA NA NA NA NA NA NA NA
13 52 NA NA NA NA NA NA NA NA NA NA NA NA NA
14 108 NA NA NA NA NA NA NA NA NA NA NA NA NA
Q6 是一個 ID。 在 Q10.1 到 Q10.117 中,為每個 ID 分配了不同的值(參見第 12 行)。 使用 unlist,我使用 unlist 並設法在 117 列中每次提到一個值時獲得頻率。 但我需要將它們與各自的 ID 相匹配。 所以基本上我需要將一個 ID col 與 117 列匹配並獲取每列的頻率。
othertopics<-data.frame(table(unlist(TableTopic2[,22:138])))
Var1 Freq
10 1
100 4
101 1
102 12
103 7
104 21
105 36
106 1
so for example variable 105 appeared 36 times across 17 values of IDs on column Q6( This number I counted on Excel).
So, so far I only have the first half of my solution as i need to know what is the ID associated with the variables . ( ie: the 17 values i counted)
also note that the variable columns contain the number of their variable, So for example row Q10.105 is for variable 105 which has a frequency of 36.
I hope i was able to make it clear.
Thanks!
這個問題不是特別清楚,但我會盡力而為。 我認為整理這些數據的方法是將所有非 id 列旋轉到一列(我稱之為“col_name”),然后有另一列包含所有值(主要是 NA;我稱之為“numbered_var”編號變量)。 然后,您可以根據 numbered_variable 列進行聚合。
這個例子顯然是不可重現的,所以我構建了一個簡化版本的數據(我認為):
library(dplyr)
library(tidyr)
df <- tibble(
id = 1:5,
Q1 = c(NA_integer_, 10L, NA_integer_, 10L, NA_integer_),
Q2 = c(NA_integer_, NA_integer_, 11L, NA_integer_, 11)
)
它看起來像這樣:
# A tibble: 5 × 3
id Q1 Q2
<int> <int> <dbl>
1 1 NA NA
2 2 10 NA
3 3 NA 11
4 4 10 NA
5 5 NA 11
接下來,我使用tidyr::pivot_longer()
將包含 Q 的列名放入一列,並將它們的關聯值放在另一列中:
df <- pivot_longer(
df,
cols = contains("Q"), # you will want to use this, but first remove the Q from the id column name in your data
names_to = "col_name",
values_to = "numbered_var"
)
這使得數據很長:
# A tibble: 10 × 3
id col_name numbered_var
<int> <chr> <dbl>
1 1 Q1 NA
2 1 Q2 NA
3 2 Q1 10
4 2 Q2 NA
5 3 Q1 NA
6 3 Q2 11
7 4 Q1 10
8 4 Q2 NA
9 5 Q1 NA
10 5 Q2 11
您可能仍然應該有三列,但是 id 會重復自己n -column 次,就像它們在這里為兩列重復兩次一樣。
接下來,我將按似乎感興趣的變量進行分組,並在新列中列出具有變量的唯一 ID:
df <- group_by(df, numbered_var)
df <- summarize(
df,
var_appearances = n(),
ids = list(unique(id))
)
現在,數據框如下所示:
# A tibble: 3 × 3
numbered_var var_appearances ids
<dbl> <int> <list>
1 10 2 <int [2]>
2 11 2 <int [2]>
3 NA 6 <int [5]>
該ids
列是一個帶有id
向量的列表列:
print(df$ids)
[[1]]
[1] 2 4
[[2]]
[1] 3 5
[[3]]
[1] 1 2 3 4 5
我不確定這正是你能夠做到的,但希望它能讓你朝着正確的方向前進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.