R编程:条件总是为TRUE

时间:2015-12-02 22:57:43

标签: r

我正在尝试让最后一列从第5列获取数据。如果角色是" M"它应该做点什么,如果" F"别的,这是我的代码:

wd="c:/users/Youssef/Documents/Fares/R/employes.txt";
setwd(wd);
employes=read.table("c:/users/Youssef/Documents/Fares/R/employes.txt", sep=" ")
employes["PRIMES"] <- NA
x = "M"
ifelse(employes$V3==x, employes$PRIMES <- employes$V5*2, employes$PRIMES <- employes$V5*3)
employes

这是我的文本文件:

AD5522 42 M 42000 10
BR4230 39 F 38000 12
CC0563 39 F 35000 14
DL3222 24 M 28000 2
EM0157 43 M 38000 15
FG5441 62 M 45000 28
GG0575 27 M 44000 4
HD4410 55 F 30000 2
IA1203 32 F 28000 4
JO9876 24 F 24000 2
KJ3481 42 M 40000 8
LL1101 34 M 42000 10
MM0157 56 M 87000 15
ZD5431 34 M 54000 28
SF0325 73 M 33000 4
LK4200 61 F 23000 2
PI1243 26 F 74000 4
NB9809 42 F 64000 2
XF3111 71 M 12000 8
AL1190 23 M 53000 10

我想要做的是创建一个名为PRIMES的新列,并将第5列的值加倍并将其放在那里,如果它是M,如果它是F,则将其加倍。但是我的是什么代码确实是三重一切,好像它只读取第一个M并将每个数字乘以3并将其放在列PRIMES上

2 个答案:

答案 0 :(得分:3)

employes$PRIMES <- ifelse(employes$V3==x, employes$V5*2, employes$V5*3) 生成一个向量。你想要这个:

employes$PRIMES <- employes$V5 * ifelse(employes$V3==x, 2, 3)

或更简单有效(谢谢@Richard)

2

这会创建一个3&{39}和{{1}}的向量,用于乘法。

答案 1 :(得分:0)

这是一个明智的方式:

library(dplyr)

data = 
  employes %>%
  setNames(c("ID", "age", "gender", "long", "short"))

gender_key = data_frame(
  gender = c("M", "F"),
  multiplier = c(2, 3) )

result = 
  data %>%
  left_join(gender_key) %>%
  mutate(new_short = short * multiplier)