簡體   English   中英

計算跨列的出現次數並匹配到 ID 列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM