我是R的新手所以请耐心等待。
我的数据框为8891 obs。 4个变量:
Survived: int 0 1 1 0 0 0 0 1 1 ...
Sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
Age : num 22 38 15 78 35 NA 54 2 27 14 ...
Fare : num 120 120 120 120 ...
Sex <- c("female","male", "male", "male")
Survive <- c(0,1,1,0)
Age <- c(22,38,15,78)
Fare <- c(120,120,120,120)
dataframe <- data.frame(Sex, Survive, Age, Fare)
#View(dataframe)
我正在尝试创建另一个变量FixedFare
,其中变量Fare
的值将根据变量Survived
和变量Age
的值除以2。
基本上,如果Survived
中的值为1且Age
中的值为&lt; = 16且&gt; = 60,则将Fare
中的值X除以2。如果遇到NA
,则只需标记NA
。所有这些都在同一个数据框内。
我不知道该怎么做。我已经在Stackoverflow中搜索了所有相关问题以获得解决方案,但找不到与我的问题类似的问题。
感谢您的帮助。
答案 0 :(得分:0)
我们创建了一个逻辑向量&#39; i1&#39;基于&#39;生存&#39;的条件为1且Age为小于17或大于59.使用该索引子集&#39; Fare&#39;除以2,并将输出分配给新列&#39; FixedFare&#39;。< / p>
i1 <- with(df1, Survive==1 & (Age < 17 | Age > 59))
df1$FixedFare[i1] <- df1$Fare[i1]/2
目前尚不清楚我们是否需要NA
来表示不符合条件的元素。如果我们需要原价&#39;票价&#39;值而不是NA。
df1$FixedFare[!i1] <- df1$Fare[!i1]
或者我们可以使用更快的data.table
来做到这一点
library(data.table)
setDT(df1)[,FixedFare:= Fare][Survive==1 & (Age < 17 | Age > 59), FixedFare:= Fare/2]
答案 1 :(得分:0)
ifelse
方法根据提供的条件分配值:
df$Fare <- ifelse(df$Survived == 1 & (df$Age <= 16 | df$Age >= 60), df$Fare/2, df$Fare)
使用问题中的示例,我们将函数调用包装在transform
:
transform(dataframe, Fare = ifelse(Survive == 1 & (Age <= 16 | Age >= 60), Fare/2, Fare))
# Sex Survive Age Fare
#1 female 0 22 120
#2 male 1 38 120
#3 male 1 15 60
#4 male 0 78 120