我有一个包含许多字符列的数据框。列包含空文本字符串和文本字符串。我想用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>
答案 0 :(得分:2)
这是一个简单的矢量化解决方案
(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)]