R-使用任何其他列中的值填充列

R-使用任何其他列中的值填充列,r,dataframe,multiple-columns,R,Dataframe,Multiple Columns,我有一个5列的数据框:4列有值,1列为空。我想用4列中任意一列的值填充空列 假设这是我的数据帧df: Col1 Col2 Col3 Col4 Col5 11 11 2 2 2 23 4 4 15 15 我希望我的结果如下所示: Col1 Col2 Col3 Col4 Col5 11 11 11 2 2 2 2

我有一个5列的数据框:4列有值,1列为空。我想用4列中任意一列的值填充空列

假设这是我的数据帧
df

Col1 Col2 Col3 Col4 Col5
  11   11    
   2         2    2
       23
   4         4
       15        15
我希望我的结果如下所示:

Col1 Col2 Col3 Col4 Col5
  11   11             11
   2         2    2    2
       23             23
   4         4         4
       15        15   15
编辑我应用了每个人提供的答案,但由于某些原因,它仍然不起作用。如果有帮助,这是我实际数据的dput(head(df)):

structure(list(Treat_One = c("      ", "5 2012", "4 2008", "4 2010", 
"      ", "2 2008"), Treat_Two = c("8 2010", "5 2012", "4 2008", 
"4 2010", "8 2011", "2 2008"), Treat_Three = c("      ", "5 2012", 
"4 2008", "4 2010", "8 2011", "2 2008"), Treat_Four = c("      ", 
"      ", "      ", "      ", "      ", "      ")), .Names = c("Treat_One", 
"Treat_Two", "Treat_Three", "Treat_Four"), row.names = c(NA, 
6L), class = "data.frame")
编辑包括
str(df)


您只需键入以下内容:

df$Col5您只需键入以下内容:

df$Col5根据OP提供的新数据,我们可以使用
trimws

df$Treat_Four <- apply(df, 1, function(x) sample(x[trimws(x) != ""], 1))
df

#    Treat_One Treat_Two Treat_Three Treat_Four
#1              8 2010                 8 2010
#2    5 2012    5 2012      5 2012     5 2012
#3    4 2008    4 2008      4 2008     4 2008
#4    4 2010    4 2010      4 2010     4 2010
#5              8 2011      8 2011     8 2011
#6    2 2008    2 2008      2 2008     2 2008

如果有
NA
值而不是空白,我们可以使用相同的逻辑

apply(df, 1, function(x) sample(x[!is.na(x)], 1))

根据OP提供的新数据,我们可以使用
trimws

df$Treat_Four <- apply(df, 1, function(x) sample(x[trimws(x) != ""], 1))
df

#    Treat_One Treat_Two Treat_Three Treat_Four
#1              8 2010                 8 2010
#2    5 2012    5 2012      5 2012     5 2012
#3    4 2008    4 2008      4 2008     4 2008
#4    4 2010    4 2010      4 2010     4 2010
#5              8 2011      8 2011     8 2011
#6    2 2008    2 2008      2 2008     2 2008

如果有
NA
值而不是空白,我们可以使用相同的逻辑

apply(df, 1, function(x) sample(x[!is.na(x)], 1))
试试这个:

df <- data.frame(col1 = c(1, NA, 3), col2 = c(1, 2, NA), col3 = c(NA, 2, 3),col4 = rep(NA, 3))
for (i in 1:nrow(df)) {
    df[i, 4] <- df[i, which(!is.na(df[i,]))][, 1]
}
df
df(1中的i:nrow(df)){
+df[i,4]试试这个:

df <- data.frame(col1 = c(1, NA, 3), col2 = c(1, 2, NA), col3 = c(NA, 2, 3),col4 = rep(NA, 3))
for (i in 1:nrow(df)) {
    df[i, 4] <- df[i, which(!is.na(df[i,]))][, 1]
}
df
df(1中的i:nrow(df)){

+df[i,4]这是一个带有
max.col

df$Treat_Four <- df[1:3][cbind(1:nrow(df), max.col(sapply(df[1:3], trimws)!='', "first"))]
df
#   Treat_One Treat_Two Treat_Three Treat_Four
#1              8 2010                 8 2010
#2    5 2012    5 2012      5 2012     5 2012
#3    4 2008    4 2008      4 2008     4 2008
#4    4 2010    4 2010      4 2010     4 2010
#5              8 2011      8 2011     8 2011
#6    2 2008    2 2008      2 2008     2 2008

df$Treat\u Four这是一个带有
max.col

df$Treat_Four <- df[1:3][cbind(1:nrow(df), max.col(sapply(df[1:3], trimws)!='', "first"))]
df
#   Treat_One Treat_Two Treat_Three Treat_Four
#1              8 2010                 8 2010
#2    5 2012    5 2012      5 2012     5 2012
#3    4 2008    4 2008      4 2008     4 2008
#4    4 2010    4 2010      4 2010     4 2010
#5              8 2011      8 2011     8 2011
#6    2 2008    2 2008      2 2008     2 2008

df$Treat\u Four如果第3行是空的(Col2没有值3),您想在Col5中有一个空的,还是仅仅是下面提供的解决方案?似乎每行都有相同的值。您可以只做
df$Col5,您应该提供
dput(head(df))
。请向我们展示
str(您的.data.frame)的输出
为了帮助我们更好地理解空单元格(您真的确定它们包含NAs吗?)不确定用这些不合适的空格替换
NA
s有什么意义,但是如果第3行为空(Col2没有值3),您可以执行
df$5您希望在Col5中有一个空格,或者它只是下面提供的解决方案?似乎每行的值都相同。您可以执行
df$Col5,您应该提供
dput(head(df))
。请向我们展示
str(your.data.frame)
的输出,以帮助我们更好地理解空单元格(你真的确定它们包含NAs吗?)@user2105555根据提供的新数据,添加了一个新答案。@user2105555添加了一个答案来处理
NA
values由于某种原因,它不适用于Col1中的NA。我包含了head()@user2105555根据提供的新数据,添加了一个新答案。由于某些原因,它不适用于我在Col1中有
NA
。我在原始帖子中包含了我的数据的
head()
。由于某些原因,它不适用于我在Col1中有
NA
。我包含了
head()
我在原始帖子中的数据。我认为这不起作用,因为它将硬编码的数字添加到col5中,而不是使用同一行中第一个非空列的值(根据OP的要求)我认为这是行不通的,因为它在col5中添加了一个硬编码的数字,而不是使用同一行中第一个非空列的值(根据OP的请求)