根据数据框中多个变量的多个值,从变量中编辑值

时间:2015-10-22 14:59:54

标签: r

我是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中搜索了所有相关问题以获得解决方案,但找不到与我的问题类似的问题。

感谢您的帮助。

2 个答案:

答案 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