我正在嘗試做的事情:我想計算在另一個串列中定義的某些姓氏(組)的相對表示。我想知道這些姓氏在更大的群體中所占的份額。
例子:
首先,我有一個通過某些標準定義的“特殊姓氏”串列
N1 <- data.frame(c("Smith", "Mountain", "Friedman", "Keynes"))
,接下來我有一個更大的串列,其中包含更多和雙重條目
N2 <- data.frame(c("Delange", "Smith", "Mountain", "Keynes", "Woodman", "Smith", "Keynes", "Keynes"))
現在我想計算在第一個串列中定義的名稱在第二個串列中出現的次數。所以我可以知道第二個串列中總共有 6 個條目檢查第一個串列的標準。然后我就能知道這個串列中“特殊姓氏”的份額。
我的真實資料框非常廣泛,遺憾的是我無法找到解決這個問題的方法,盡管這聽起來很容易解決。
為什么/更大的圖景:我試圖通過姓氏來追蹤精英。首先是在 t-1 代定義的一組精英姓氏 k。其次,計算這些姓氏k在t世代中的相對代表性,t 1,...,t n:(姓氏k在精英群體姓氏t世代中的份額)/(姓氏k在一般人群t中的份額)
uj5u.com熱心網友回復:
給定您的資料(為您的列添加名稱)
N1 <- data.frame("sur"=c("Smith", "Mountain", "Friedman", "Keynes"))
N2 <- data.frame("sur"=c("Delange", "Smith", "Mountain", "Keynes", "Woodman", "Smith", "Keynes", "Keynes" ))
使用表格并合并
> table(merge(N1,N2,by="sur"))
Keynes Mountain Smith
3 1 2
使用匹配的總份額
> mean(complete.cases(match(N2$sur,N1$sur)))
[1] 0.75
uj5u.com熱心網友回復:
用于%in%獲取匹配項,sum然后除以 N2 的行以獲得特殊姓氏的份額。
sum(N2[,1] %in% N1[,1]) / nrow(N2)
#[1] 0.75
uj5u.com熱心網友回復:
這是使用 tidyverse 包的解決方案。前兩行完成了大部分作業,最后兩行捕獲了某些名稱出現次數為零的情況。dplyr::complete在更復雜的情況下,最好用最后兩行替換。
library(dplyr)
library(tidyr)
N1 <- data.frame(name = c("Smith", "Mountain", "Friedman", "Keynes"))
N2 <- data.frame(name = c("Delange", "Smith", "Mountain", "Keynes", "Woodman", "Smith", "Keynes", "Keynes"))
inner_join(N1, N2) |> # combine datasets, keeping elements in common
count(name) |> # count
right_join(N1) |> #add any elements missing from N1
replace_na(list(n = 0)) #replace NA with zero
name n
1 Keynes 3
2 Mountain 1
3 Smith 2
4 Friedman 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/480411.html
標籤:r
上一篇:計算復雜字串的出現次數
下一篇:R格式資料框重復ID和冗余資訊
