r - 如何分配r中向量的一半

标签 r data-manipulation

因为我正在处理一项调查,所以当 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/

相关文章:

r - 对 R 中的积分进行积分

r - 如何根据 r 中的其他变量更新变量的信息?

lua - 操作表键

python - 按特定值删除列表中的列表

r - 如何在保留非数字列的同时删除总和为 0 的列和行

与 GGally 对图的圆形相关

javascript - 处理后从plotly select中清除event_data

r - 在 R Markdown YAML 中包含 css 文件的文件路径

r - 使用 nlsLM 函数查找非线性模型的初始条件

r - 使用 pivot_wider 获取 true 或 false