[英]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
每个值与""
(空白)进行比较,并返回一个逻辑矩阵,其中TRUE
和FALSE
指示每个值是否等于""
。 加+ 0
,逻辑值将转换为1
和0
。
编辑:
如果您有一个data.table对象,并且想通过引用对其进行更新,则可以这样做
df[, names(df) := lapply(.SD, function(x) (!x %in% c("", " ")) + 0)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.