Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中更改基于另一个数据帧的单元格_R_Dplyr_Tidyr_Data Manipulation - Fatal编程技术网

在R中更改基于另一个数据帧的单元格

在R中更改基于另一个数据帧的单元格,r,dplyr,tidyr,data-manipulation,R,Dplyr,Tidyr,Data Manipulation,在这种情况下,如果df1==1中的单元格新值是当前df2单元格,我想用另一个dataframe的值创建一个新列 df1 <- c("1","2","3","4","5") df2 <- c("a","b","c","d","e") df <- cbind(df1,df2) df df1 df2 [1,] "1" "a" [2,] "2" "b" [3,] "3" "c" [4,] "4" "d" [5,] "5" "e" 事先非常感谢您可以使用ifelse: tr

在这种情况下,如果df1==1中的单元格新值是当前df2单元格,我想用另一个dataframe的值创建一个新列

df1 <- c("1","2","3","4","5")
df2 <- c("a","b","c","d","e")

df <- cbind(df1,df2)
df
     df1 df2
[1,] "1" "a"
[2,] "2" "b"
[3,] "3" "c"
[4,] "4" "d"
[5,] "5" "e"

事先非常感谢

您可以使用
ifelse

transform(df, my_col = ifelse(df1 == 1, df2, df1))

#  df1 df2 my_col
#1   1   a      a
#2   2   b      2
#3   3   c      3
#4   4   d      4
#5   5   e      5
library(dplyr)
df %>%mutate(my_col = ifelse(df1 == 1, df2, df1))
dplyr中的等效项:

transform(df, my_col = ifelse(df1 == 1, df2, df1))

#  df1 df2 my_col
#1   1   a      a
#2   2   b      2
#3   3   c      3
#4   4   d      4
#5   5   e      5
library(dplyr)
df %>%mutate(my_col = ifelse(df1 == 1, df2, df1))

或者先复制
df1
值,然后替换

df$my_col <- df$df1
df$my_col[df$df1 == 1] <- df$df2[df$df1 == 1]

df$my\u col您可以使用
ifelse

transform(df, my_col = ifelse(df1 == 1, df2, df1))

#  df1 df2 my_col
#1   1   a      a
#2   2   b      2
#3   3   c      3
#4   4   d      4
#5   5   e      5
library(dplyr)
df %>%mutate(my_col = ifelse(df1 == 1, df2, df1))
dplyr中的等效项

transform(df, my_col = ifelse(df1 == 1, df2, df1))

#  df1 df2 my_col
#1   1   a      a
#2   2   b      2
#3   3   c      3
#4   4   d      4
#5   5   e      5
library(dplyr)
df %>%mutate(my_col = ifelse(df1 == 1, df2, df1))

或者先复制
df1
值,然后替换

df$my_col <- df$df1
df$my_col[df$df1 == 1] <- df$df2[df$df1 == 1]

df$my_col使用
数据。表将就地分配

library(data.table)
setDT(df)[, my_col := df1][df1 == 1, my_col := df2]
df
#   df1 df2 my_col
#1:   1   a      a
#2:   2   b      2
#3:   3   c      3
#4:   4   d      4
#5:   5   e      5

或使用
fifelse

setDT(df)[, my_col := fifelse(df1 == 1, df2, df1)]
或使用
fcase

setDT(df)[, my_col := fcase(df1 == 1, df2, default = df1)]
数据
df使用
数据。表将就地分配

library(data.table)
setDT(df)[, my_col := df1][df1 == 1, my_col := df2]
df
#   df1 df2 my_col
#1:   1   a      a
#2:   2   b      2
#3:   3   c      3
#4:   4   d      4
#5:   5   e      5

或使用
fifelse

setDT(df)[, my_col := fifelse(df1 == 1, df2, df1)]
或使用
fcase

setDT(df)[, my_col := fcase(df1 == 1, df2, default = df1)]
数据
df