我正在尝试使用数据框行进行一些操作。假设我有下一个数据框:
Label<-c(‘A’, ‘A’,’B’,’B’,’A’,’B’,’A’,’X’,’Y’)
Var <- c(1,2,4,7,3,4,6,10,13)
Data<- data.frame(Label,Var)
我希望当Label = A时,Var中的值乘以X,而当label = B时,Y中乘以
我试图编写一个函数,但是没有成功,可能我缺乏使用数据框架的经验。
感谢您的帮助!
答案 0 :(得分:1)
以下是快速解答:
library(tidyverse)
Label<-c(‘A’, ‘A’,’B’,’B’,’A’,’B’,’A’,’X’,’Y’)
Var <- c(1,2,4,7,3,4,6,10,13)
Dat <- data_frame(Label,Var) #use data_frame and don't call the dataframe 'Data'
Dat <- Dat %>% # a pipe moves to next command
mutate( #to create a new variable
new_var =
case_when( #runs a series of ifelse statements
Label == 'A' ~ Var*X, #framework: if ~ then
Label == 'B' ~ Var*Y
)
)
答案 1 :(得分:1)
好的旧的简单base
解决方案怎么样?
X <- 3
Y <- 2
Data$NewVar <- with(Data, ifelse(Label == "A", Var * X, Var * Y))
Data
Label Var NewVar
1 A 1 3
2 A 2 6
3 B 4 8
4 B 7 14
5 A 3 9
6 B 4 8
7 A 6 18
8 X 10 20
9 Y 13 26
ifelse
评估第一个条件是否为真,然后评估下一条语句,否则评估第二条。