您可以在data.frame上使用gsub
吗?
dat="1 1W 16 2W 16
2 1 16 2W W
3 1W 16 16 0
4 4 64 64 0"
data=read.table(text=dat,header=F)
gsub("W",3,data)
为什么我们得到如下输出:
[1] "1:4" "c(2, 1, 2, 3)" "c(16, 16, 16, 64)" "c(2, 2, 1, 3)" "c(2, 3, 1, 1)" .
很难理解。
> str(data)
'data.frame': 4 obs. of 5 variables:
$ V1: int 1 2 3 4
$ V2: Factor w/ 3 levels "1","1W","4": 2 1 2 3
$ V3: int 16 16 16 64
$ V4: Factor w/ 3 levels "16","2W","64": 2 2 1 3
$ V5: Factor w/ 3 levels "0","16","W": 2 3 1 1
V2: Factor w/ 3 levels "1","1W","4": 2 1 2 3
中* 2 1 2 3 * 的含义是什么?
答案 0 :(得分:2)
输出与as.character(data)
相同。
由于字母W
从未出现在任何字符串中,gsub
除了转换为字符外无效。
正如评论中所讨论的,as.character
在数据框架上有奇怪的行为。它调用as.vector(x, "character")
,它需要将每列压缩为单个值,并选择返回重新创建列所需的代码,忽略属性。对于因子列,这意味着您获得整数级别,而不是字符串值,这就是W
永远不会出现的原因。
答案 1 :(得分:0)
您需要apply
遍历数据框中的每个值:
apply(data, 1:2, function(x) gsub("W", 3, x))
# V1 V2 V3 V4 V5
# [1,] "1" "13" "16" "23" "16"
# [2,] "2" "1" "16" "23" "3"
# [3,] "3" "13" "16" "16" "0"
# [4,] "4" "4" "64" "64" "0"
@Richie Cotton的评论解释了为什么你需要这样做。