根据值长度替换R Dataframe 列值

bsxbgnwa  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(109)

假设R中有如下df:

df <- data.frame(A = c(1234, 56789, 159, 45950, 7844, 678, 17, 28794), B = c(657, 823, 465, 756, 328, 122, 490, 990))

我需要将A列中长度小于4的值替换为“",但我不想过滤掉这些行。长度大于4的值可以保持原样。我引用了post Replace values based on length,但没有运气,因为代码没有对该列执行任何操作。

file['A'][sapply(file['A'], nchar) < 4] <- ""

有什么建议吗?

lvjbypge

lvjbypge1#

如果您的 Dataframe 包含字符,您可以使用nchar来计算sapply的字符数,如下所示:

df <- data.frame(A = as.character(c(1234, 56789, 159, 45950, 7844, 678, 17, 28794)), B = as.character(c(657, 823, 465, 756, 328, 122, 490, 990)))
df[sapply(df, \(x) nchar(x) < 4)] <- ""
df
#>       A B
#> 1  1234  
#> 2 56789  
#> 3        
#> 4 45950  
#> 5  7844  
#> 6        
#> 7        
#> 8 28794

创建于2023年1月15日,使用reprex v2.0.2
如果您的 Dataframe 包含数值,您可以更改所有小于1000的值,如下所示:

df <- data.frame(A = c(1234, 56789, 159, 45950, 7844, 678, 17, 28794), B = c(657, 823, 465, 756, 328, 122, 490, 990))
df[sapply(df, \(x) x < 1000)] <- ""
df
#>       A B
#> 1  1234  
#> 2 56789  
#> 3        
#> 4 45950  
#> 5  7844  
#> 6        
#> 7        
#> 8 28794

创建于2023年1月15日,使用reprex v2.0.2

798qvoo8

798qvoo82#

假设用x替换长度小于4的值(假设没有浮点数),可能是df[df〈= 999]=“X”

A B
1  1234 X
2 56789 X
3     X X
4 45950 X
5  7844 X
6     X X
7     X X
8 28794 X

相关问题