是否可以使用rbind.fill而不使用NA';s
我正在尝试将两个具有不同列数和列标题的数据帧组合在一起。但是,在我使用是否可以使用rbind.fill而不使用NA';s,r,na,rbind,R,Na,Rbind,我正在尝试将两个具有不同列数和列标题的数据帧组合在一起。但是,在我使用rbind.fill()组合它们之后,生成的文件用NA填充了空单元格 这非常不方便,因为其中一列的数据也表示为“NA”(北美),所以当我将其导入csv时,电子表格无法区分它们 我有没有办法: 使用rbind.fill函数,但不使用NA填充空单元格 或 更改列以替换NA值* *我浏览了博客,并尝试了两种最流行的解决方案: df$col[is.na(df$col)] <- 0, #it does not work df$co
rbind.fill()
组合它们之后,生成的文件用NA
填充了空单元格
这非常不方便,因为其中一列的数据也表示为“NA”(北美),所以当我将其导入csv时,电子表格无法区分它们
我有没有办法:
rbind.fill
函数,但不使用NA填充空单元格df$col[is.na(df$col)] <- 0, #it does not work
df$col = ifelse(is.na(df$col), "X", df$col), #it changes all the characters to numbers, and ruins the column
df$col[is.na(df$col)]na
与“na”
到R
不同,但您最喜欢的电子表格程序可能会这样解释NA
是R
中的一个特殊值,就像NaN
一样(不是数字)。如果我理解正确,您的解决方案之一是将代表北美的列中的“NA”值替换为其他值,在这种情况下,您应该能够做到
df$col[ df$col == "NA" ] <- "NorthAmerica"
方法来解决此问题
我认为您希望将“NA”和任何NA
s保留在第一个df中,但将第二个df中由rbind.fill()形成的所有NA
更改为类似“NotAvailable”的内容。你可以这样做
df1 <- data.frame( col = rep( "NA" , 6 ) , x = 1:6 , z = rep( 1 , 6 ) )
df2 <- data.frame( col = rep( "SA" , 2 ) , x = 1:2 , y = 5:6 )
df <- rbind.fill( df1 , df2 )
temp <- df [ (colnames(df) %in% colnames(df2)) ]
temp[ is.na( temp ) ] <- "NotAvailable"
res <- cbind( temp , df[ !( colnames(df) %in% colnames(df2) ) ] )
#df has real NA values in column z and column y. We just want to get rid of y's
df
# col x z y
# 1 NA 1 1 NA
# 2 NA 2 1 NA
# 3 NA 3 1 NA
# 4 NA 4 1 NA
# 5 NA 5 1 NA
# 6 NA 6 1 NA
# 7 SA 1 NA 5
# 8 SA 2 NA 6
#res has "NA" strings in col representing "North America" and NA values in z, whilst those in y have been removed
#More generally, any NA in df1 will be left 'as-is', whilst NA from df2 formed using rbind.fill will be converted to character string "NotAvilable"
res
# col x y z
# 1 NA 1 NotAvailable 1
# 2 NA 2 NotAvailable 1
# 3 NA 3 NotAvailable 1
# 4 NA 4 NotAvailable 1
# 5 NA 5 NotAvailable 1
# 6 NA 6 NotAvailable 1
# 7 SA 1 5 NA
# 8 SA 2 6 NA
df1NA
与“NA”
到R
不同,但您最喜欢的电子表格程序可能会这样解释NA
是R
中的一个特殊值,就像NaN
一样(不是数字)。如果我理解正确,您的解决方案之一是将代表北美的列中的“NA”值替换为其他值,在这种情况下,您应该能够做到
df$col[ df$col == "NA" ] <- "NorthAmerica"
方法来解决此问题
我认为您希望将“NA”和任何NA
s保留在第一个df中,但将第二个df中由rbind.fill()形成的所有NA
更改为类似“NotAvailable”的内容。你可以这样做
df1 <- data.frame( col = rep( "NA" , 6 ) , x = 1:6 , z = rep( 1 , 6 ) )
df2 <- data.frame( col = rep( "SA" , 2 ) , x = 1:2 , y = 5:6 )
df <- rbind.fill( df1 , df2 )
temp <- df [ (colnames(df) %in% colnames(df2)) ]
temp[ is.na( temp ) ] <- "NotAvailable"
res <- cbind( temp , df[ !( colnames(df) %in% colnames(df2) ) ] )
#df has real NA values in column z and column y. We just want to get rid of y's
df
# col x z y
# 1 NA 1 1 NA
# 2 NA 2 1 NA
# 3 NA 3 1 NA
# 4 NA 4 1 NA
# 5 NA 5 1 NA
# 6 NA 6 1 NA
# 7 SA 1 NA 5
# 8 SA 2 NA 6
#res has "NA" strings in col representing "North America" and NA values in z, whilst those in y have been removed
#More generally, any NA in df1 will be left 'as-is', whilst NA from df2 formed using rbind.fill will be converted to character string "NotAvilable"
res
# col x y z
# 1 NA 1 NotAvailable 1
# 2 NA 2 NotAvailable 1
# 3 NA 3 NotAvailable 1
# 4 NA 4 NotAvailable 1
# 5 NA 5 NotAvailable 1
# 6 NA 6 NotAvailable 1
# 7 SA 1 5 NA
# 8 SA 2 6 NA
df1如果您有一个包含NA的数据帧,并且您想全部替换它们,您可以执行以下操作:
df[is.na(df)] <- -999
df[is.na(df)]如果您有一个包含na的数据帧,并且您想替换它们,那么您可以执行以下操作:
df[is.na(df)] <- -999
df[is.na(df)]字符串“它不工作”不是R中的内置错误消息。请提供。如果您无法共享数据框,请举一个小例子来复制您的问题。您是否尝试过更改write.csv的“na”选项?Jack-对不起,我的意思是它对我的电子表格没有影响。我运行它时没有出现错误,但出现了一条警告消息:在[blind Jesse-您的解决方案有效,但它替换了电子表格中的所有NA,但我只想替换一个特定列。有什么想法吗?字符串“it not work”不是R中的内置错误消息。请提供。如果您无法共享数据帧,请制作一个小示例来复制您的问题。您是否尝试更改write.csv的“na”选项?Jack-抱歉,我的意思是它对我的电子表格没有影响。我运行它时没有错误,但有一条警告消息:in[盲Jesse-你的解决方案有效,但它替换了电子表格中的所有NA,但我只想替换一个特定列。有什么想法吗?我在原始问题中尝试过,但不幸的是,它对我的电子表格没有影响。谢谢!我在原始问题中尝试过,但不幸的是,它对我的电子表格没有影响。谢谢!实际上,北美的“NA”值是固定的。我想将“null”NA值更改为其他值,例如“-”@David下面的解决方案对您有效吗?是否需要进一步调整?感谢Simon的帮助。我实际上无法获得x[is.NA(x)]您好@David,我将编辑我的答案,以便您能更清楚地看到步骤。我想我们可能在rbind.fill阶段沟通错误。@David edited-让我知道这是否是您所期望的。实际上,北美的“NA”值是固定的。我想将“null”NA值更改为其他值,例如“-”@David下面的解决方案对你有用吗?是否需要进一步调整?感谢Simon的帮助。我实际上无法获得x[is.na(x)]嗨@David,我将编辑我的答案,以便你能更清楚地看到步骤。我想我们可能在rbind.fill阶段沟通错误。@David编辑-让我知道这是否是你所期望的。