我在BehaviorSpace中使用Netlogo,输出表中的一个单元格是一个代表10个不同数字的字符串。
这是数据的代表性模型:
trialmatrix <- matrix(c("[4.5 6.8 7.9 8.1 9.0 1.2 3.4]","[4.5 6.8 7.9 8.1 9.0 1.2 3.4]", "[4.5 6.8 7.9 8.1 9.0 1.2 3.4]"), nrow=3)
trialdf <- data.frame(trialmatrix, stringsAsFactors = FALSE)
该字符串包含在[]中。我使用R删除[]并将字符串转换为单个数字的向量。
但gsub会添加新字符并且不会删除[]:
> gsub("\\[ | \\]", " ", trialdf)
#[1] "c(\" 4.5 6.8 7.9 8.1 9.0 1.2 3.4]\", \" 4.5 6.8 7.9 8.1 9.0 1.2 3.4]\", \" 4.5 6.8 7.9 8.1 9.0 1.2 3.4]\")"
替换所有特殊字符会删除小数点并仍添加c:
gsub("[^[:alnum:] ]", "", trialdf)
#[1] "c45 68 79 81 90 12 34 45 68 79 81 90 12 34 45 68 79 81 90 12 34"
然后我跑
gsub("c","", trialdf2)
摆脱c。 现在我有了
#[1] "45 68 79 81 90 12 34 45 68 79 81 90 12 34 45 68 79 81 90 12 34"
然后
trial3 <- as.numeric(unlist(strsplit(trial2, " ")))
给出了
#[1] 45 68 79 81 90 12 34 45 68 79 81 90 12 34 45 68 79 81 90 12 34
我现在需要按.1缩放以获得小数。
trial4 <- trial3 * .1
#[1] 4.5 6.8 7.9 8.1 9.0 1.2 3.4 4.5 6.8 7.9 8.1 9.0 1.2 3.4 4.5 6.8 7.9 8.1 9.0 1.2 3.4
现在它又回到了数据框架中。
trialdf2 <- data.frame(matrix(trial4, ncol=7, byrow=TRUE))
# X1 X2 X3 X4 X5 X6 X7
#1 4.5 6.8 7.9 8.1 9 1.2 3.4
#2 4.5 6.8 7.9 8.1 9 1.2 3.4
#3 4.5 6.8 7.9 8.1 9 1.2 3.4
然后我需要重命名所有列(真实数据集在字符串中最多包含200个元素)。 。
必须有一种更简单的方法。为什么第一个gsub会产生废话呢?
感谢您的期待!