簡體   English   中英

R - 根據另一個數據框列中的值滿足的條件在數據框列中添加值(由公式導出)

[英]R - Add values (derived by a formula) in a dataframe column based on a condition met by values in a column of another dataframe

這是一個示例數據集:

data = data.frame('Cat' = c('A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C', 'C'),
                  'Value' = c(1,1,1,2,2,3,3,3,3,3))
data

在此處輸入圖片說明

另一個數據框:

a = data.frame('Name' = c('A', 'B', 'C', 'D'))

期望的輸出:

在此處輸入圖片說明

我想了解如何在數據幀的同一行中引用另一個單元格,並使用該單元格的值執行某些功能。

這個工作對“數據”:

a[,'In Data?'] = ifelse(a$Name %in% unique(data$Cat), "Y", "N")

這對於中位數失敗了:

b$Median = median(data$Cat[data$Cat == a$Name])

Error message:
Error in Ops.factor(data$Cat, a$Name) : 
  level sets of factors are different

計數失敗

a$Count = ifelse(a$Name %in% unique(data$Cat), length(data$Cat==a$Name), 0)

Error:
Error in Ops.factor(data$Cat, a$Name) : 
  level sets of factors are different

. . 第二個數據框列:

  1. 貓:ABCD
  2. 數數 :
  3. 部分 :
  4. 中位數:
  5. 值 > 中位數:
  6. f(x) : {計數 + 10}
  7. 在數據?

最好將這些操作定義為合並和匯總。 (就單元格和行而言,似乎非常像 Excel 而不是像 R 語言)。 dplyr包在這里有很大幫助

library(dplyr)
a %>% 
  left_join(data, by=c("Name"="Cat")) %>% 
  group_by(Name) %>% 
  summarize(
    Count=sum(!is.na(Value)),
    Median=median(Value),
    ValuesGtMed=sum(Value>Median),
    f = Count+10,
    InData = if_else(Count>0, "Y","N")
  ) %>% 
  mutate(Proportion=Count/sum(Count))

left_join確保我們得到的所有值a ,然后我們只需每月通過定義的組使用不同的匯總函數Name

輸出:

  Name  Count Median ValuesGtMed     f InData Proportion
  <chr> <int>  <dbl>       <int> <dbl> <chr>       <dbl>
1 A         3      1           0    13 Y             0.3
2 B         2      2           0    12 Y             0.2
3 C         5      3           0    15 Y             0.5
4 D         0     NA          NA    10 N             0  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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