簡體   English   中英

R中的計算列以及從另一個數據幀中查找

[英]Calculated column in R with lookup from another data frame

我對R很陌生,已經創建了一些函數,但是我有點迷失在這里:我需要提供“結果”列的值。 我目前有一個數據框,其列名稱為“ Seasons”和“ Total”。 但是,我需要添加另一列“結果”。 為此,我需要從另一個數據幀中查找“乘數”值。

Seasons    Total    Result

Winter     200       100
Fall        50        25
Spring      10         5
Summer     120        12

我還有其他數據列和列值

Multiplier     Value  
Win1            0.5
Win2            0.1

當季節為冬季,秋季和春季時,Win1僅應乘以“總計”,而當季節為夏季時,僅將Win2乘以“總計”。 這應該是“結果”列的值。

謝謝

這有效

data1 = data.frame(Seasons = c("Winter","Fall","Spring","Summer"),
           Total = c(200,50,10,120),stringsAsFactors = F)
data2 = data.frame(Multiplier = c("Win1","Win2"), Value = c(0.5,0.1), stringsAsFactors = F)

data1$Total = ifelse(data1$Seasons != "Summer", data1$Total[data1$Seasons != "Summer"]*
                       data2[data2$Multiplier%in%"Win1",2],
                     data1$Total[data1$Seasons == "Summer"]*
                       data2[data2$Multiplier%in%"Win2",2])

使用dplyr另一種選擇可以是:

df1 %>% mutate(Result = ifelse(Seasons %in% c("Winter", "Fall", "Spring"), 
            Total*df2[df2$Multiplier=="Win1",]$Value,
            Total*df2[df2$Multiplier=="Win2",]$Value))

#  Seasons Total Result
#1  Winter   200    100
#2    Fall    50     25
#3  Spring    10      5
#4  Summer   120     12

# OR 2nd Option is using with
df1$Result <- with(df1, ifelse(Seasons %in% c("Winter", "Fall", "Spring"),
              Total*df2[df2$Multiplier=="Win1",]$Value,
              Total*df2[df2$Multiplier=="Win2",]$Value) )

數據

df1 <- read.table(text = "Seasons    Total
Winter     200
Fall        50
Spring      10
Summer     120", header = T, stringsAsFactor =F)

df2 <- read.table(text = "Multiplier     Value  
Win1            0.5
Win2            0.1", header = T, stringsAsFactor = F)

您可以使用ifelse()

df$Result <- ifelse(df$Seasons=="Summer", df2$Value[2]*df$Total, df2$Value[1]*df$Total)

暫無
暫無

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

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