![](/img/trans.png)
[英]Multiply column values in one data.frame by column in another data.frame on a condition in R
[英]Fill a data.frame column with values from other data.frame column with a condition R
我有這兩個data.frames:
df1 = data.frame(
"scientific_name"=c("Anchietea ballardii","Anemia patens","Cololobus argenteus"),
"threat_status"=c("VU","EN","EN")
)
> df1
scientific_name threat_status
1 Anchietea ballardii VU
2 Anemia patens EN
3 Cololobus argenteus EN
>
df2 = data.frame(
"scientific_name"=c("Anchietea ballardii","Anemia patens","Cololobus argenteus","Coleocephalocereus pluricostatus", "Dyckia bracteata", "Merianthera parvifolia", "Kielmeyera rupestris"),
"threat_status"=c(NA)
)
> df2
scientific_name threat_status
1 Anchietea ballardii NA
2 Anemia patens NA
3 Cololobus argenteus NA
4 Coleocephalocereus pluricostatus NA
5 Dyckia bracteata NA
6 Merianthera parvifolia NA
7 Kielmeyera rupestris NA
>
我需要用對應的 df1$threat_status 填充 df2$threat_status,但是當 df2$threat_status 列沒有任何值時,可以用“LC”填充。 我正在嘗試使用 sqldf INSERT TO,但它不起作用。 我想有一個簡單的 R 解決方案,告訴我它會更優雅。 有人可以幫忙嗎? 非常感謝!
在基礎 R 中,您可以執行以下操作:
df2 = merge(df2[,1,drop=F],df1, by="scientific_name", all.x=T)
df2[is.na(df2$threat_status), 2] <- "LC"
Output:
scientific_name threat_status
1 Anchietea ballardii VU
2 Anemia patens EN
3 Coleocephalocereus pluricostatus LC
4 Cololobus argenteus EN
5 Dyckia bracteata LC
6 Kielmeyera rupestris LC
7 Merianthera parvifolia LC
您的示例中的另一個選項是簡單地將df2
中的所有threat_status
值設置為"LC"
,然后將df1
行綁定到df2
中未出現df1$scientfic_name
的行:
df2$threat_status="LC"
rbind(df1,df2[!df2$scientific_name %in% df1$scientific_name,])
Output:
scientific_name threat_status
1 Anchietea ballardii VU
2 Anemia patens EN
3 Cololobus argenteus EN
4 Coleocephalocereus pluricostatus LC
5 Dyckia bracteata LC
6 Merianthera parvifolia LC
7 Kielmeyera rupestris LC
使用sqldf
你可以:
library(sqldf)
sqldf("SELECT df2.scientific_name,
CASE WHEN df1.threat_status IS NULL THEN 'LC'
ELSE df1.threat_status
END AS threat_status
FROM df2 LEFT JOIN df1 ON df2.scientific_name = df1.scientific_name")
# scientific_name threat_status
# 1 Anchietea ballardii VU
# 2 Anemia patens EN
# 3 Cololobus argenteus EN
# 4 Coleocephalocereus pluricostatus LC
# 5 Dyckia bracteata LC
# 6 Merianthera parvifolia LC
# 7 Kielmeyera rupestris LC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.