这个理论上简单的任务今天让我发疯了。我对 R 比较陌生,但到目前为止相处得很好。也许你们中的某个人更容易解决它。
简而言之:如何从类似于这个的某种“混合”字符矩阵中获得每次观察的最大值?
dummy = as.matrix(c("c(1.5,2.6,3)", "2", "1.5", "c(1.8, 2.9)"))
所以我的结果说(数字): c(3, 2, 1.5, 2.9)
更长的故事:
我来自一个
stri_match_all_regex(somestring, regexp)
从纯文本中获取一些数字。这将返回一个字符矩阵(根据 stri_match_all_regex 函数的定义)
去掉一些杂散字符后让它看起来像这样:
dummy = as.matrix(c("c(1.5,2.6,3)","2","1.5","c(1.8,2.9)"))
您已经在我的矩阵中看到了字符串而不是向量的复杂性。我想要的状态是确定每一行的最大值。
通常没有比这更简单的了,我会跑
lapply(dummy, max)
但是应用数字函数显然不适用于这些伪装成数字的字符。(直到这一点我什至没有意识到这些都是字符而不是数字,因为它们在 rStudio View(dummy) 中没有引号)。把它变成数字
as.numeric(dummy)
让我失去了带有 NA 的矩阵中的向量。不是我想要的。我希望将每个“c(1.2,5)”解释为好像它是一个“真实的”/“无引号的 c(1.2,5)”,并且数字当然也是数字。
我什至试图 strsplit / gsub 列,但这似乎也没有成效,或者我只是做错了。
gsub( ",|c\\(|\\)", ",", dummy)
给我留下了 NAs 作为 , 没有正确解释和
as.numeric(strsplit(dummy, ",|.\\(|\\)"))
不允许我强制将 elist 对象返回为 numeric
因此,一个直截了当的问题:如何将类似于 dummy 的字符矩阵转换为“可用”形式,以在普通数字和由数字组成的向量上应用数字函数?
谢谢你的帮助!我觉得这应该很容易..但我已经坚持了很长一段时间了。