繁体   English   中英

用R中的值替换数据框中的字符向量元素

[英]Replace character vector elements in dataframe with values in R

我有一个带有许多字符列的数据框。 这些列包含空的文本字符串和文本字符串。 我想将数据框内的所有空文本字符串替换为0,并将包含字符串的元素替换为数字1。虽然无法弄清楚该如何做。

简单的例子来说明:

> df
       A   B  C
1: asdad       
2:           sd
3:    as  sd sd
4: daasd  sd   
5:        sd   
6:           sd
7:    ds sds   
8:   asd       
9:        sd sd

> str(df)
Classes ‘data.table’ and 'data.frame':  9 obs. of  3 variables:
 $ A: chr  "asdad" "" "as" "daasd" ...
 $ B: chr  "" "" "sd" "sd" ...
 $ C: chr  "" "sd" "sd" "" ...
 - attr(*, ".internal.selfref")=<externalptr> 

想要:

> df
   A B C
1: 1 0 0
2: 0 0 1
3: 1 1 1
4: 1 1 0
5: 0 1 0
6: 0 0 1
7: 1 1 0
8: 1 0 0
9: 0 1 1

str(df)
Classes ‘data.table’ and 'data.frame':  9 obs. of  3 variables:
 $ A: int  1 0 1 1 0 0 1 1 0
 $ B: int  0 0 1 1 1 0 1 0 1
 $ C: int  0 1 1 0 0 1 0 0 1
 - attr(*, ".internal.selfref")=<externalptr> 

这是一个简单的矢量化解决方案

(df != "") + 0
#    A B C
# 1: 1 0 0
# 2: 0 0 1
# 3: 1 1 1
# 4: 1 1 0
# 5: 0 1 0
# 6: 0 0 1
# 7: 0 1 1
# 8: 1 0 0
# 9: 0 1 1

如果您有data.table对象,则将as.data.table添加为

as.data.table((df != "") + 0)

一些解释

当执行df != "" ,R基本上是将df每个值与"" (空白)进行比较,并返回一个逻辑矩阵,其中TRUEFALSE指示每个值是否等于"" + 0 ,逻辑值将转换为10


编辑:

如果您有一个data.table对象,并且想通过引用对其进行更新,则可以这样做

df[, names(df) := lapply(.SD, function(x) (!x %in% c("", " ")) + 0)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM