R-使用任何其他列中的值填充列
我有一个5列的数据框:4列有值,1列为空。我想用4列中任意一列的值填充空列 假设这是我的数据帧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
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的请求)