因为我正在处理一项调查,所以当 df$vec3==3 时没有区别,而我想在 vec3==3, 1 和 2 时分配
vec1 <- c("1","2","3","4","5","6")
vec2 <- c("a","s","d","f","g","h")
vec3 <- c("1","2","3","3","3","3")
df <- cbind(vec1,vec2,vec3)
df
vec1 vec2 vec3
[1,] "1" "a" "1"
[2,] "2" "s" "2"
[3,] "3" "d" "3"
[4,] "4" "f" "3"
[5,] "5" "g" "3"
[6,] "6" "h" "3"
预期答案
vec1 vec2 vec3 vec4
[1,] "1" "a" "1" "1"
[2,] "2" "s" "2" "2"
[3,] "3" "d" "3" "1"
[4,] "4" "f" "3" "2"
[5,] "5" "g" "3" "1"
[6,] "6" "h" "3" "2"
最佳答案
我们可以使用ifelse
并重复1:2
达到vec3 == 3
的次数。
transform(df, vec4 = ifelse(vec3 == 3,rep(1:2,length.out = sum(vec3 == 3)), vec3))
# vec1 vec2 vec3 vec4
#1 1 a 1 1
#2 2 s 2 2
#3 3 d 3 1
#4 4 f 3 2
#5 5 g 3 1
#6 6 h 3 2
或者使用dplyr
:
library(dplyr)
df %>%
mutate(vec4 = ifelse(vec3 == 3, rep(1:2,length.out = sum(vec3 == 3)), vec3))
或者使用向量回收的更简单的方法。
df$vec4 <- df$vec3
df$vec4[df$vec4 == 3] <- 1:2
数据
df <- data.frame(vec1,vec2,vec3, stringsAsFactors = FALSE)
关于r - 如何分配r中向量的一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61081237/