【问题标题】:Removing space between numeric values in R删除 R 中数值之间的空格
【发布时间】:2018-10-12 09:27:13
【问题描述】:

我的列表包含如图所示的值。

Mylist:
[[1]]
[1] 1 1 1 0 1 1

[[2]]
[1] 0 0 0 0 1 0

[[3]]
[1] 0 0 0 0 1 0

我需要将此二进制值转换为十进制。我正在使用BinToDec() 函数。但是这里的值是空格分隔的。如何在该列表中获取 111011、000010 等值。我试过gsub,但它会删除字符串中的空格。谢谢!

【问题讨论】:

  • 用 dput() 做一个可重现的例子 - 请。

标签: r


【解决方案1】:

尝试使用gsublapply 删除所有空格:

BinToDec <- function(x) 
    sum(2^(which(rev(unlist(strsplit(as.character(x), "")) == 1))-1))

lst <- list("1 1 1 0 1 1", "0 0 0 0 1 0", "0 0 0 0 1 0")
unlist(lapply(lst, function(x) BinToDec(gsub("\\s+", "", x))))

[1] 59  2  2

我从this SO answer 中获取了上面的BinToDec 函数,这可能也是你看到的地方。

编辑:

如果您实际上有一个整数向量列表,请使用此选项:

lst <- list(c(1,1,1,0,1,1), c(0,0,0,0,1,0), c(0,0,0,0,1,0))
unlist(lapply(lst, function(x) BinToDec(paste(as.character(x), collapse=""))))

[1] 59  2  2

Demo

【讨论】:

  • 它适用于转换,但这里lst &lt;- list("1 1 1 0 1 1", "0 0 0 0 1 0", "0 0 0 0 1 0") 是手动给出的。列表'Mylist'直接带到了这个。所以我尝试了as.character 转换。它像这样转换。 (“1”“1”“1”“0”“1”“1”)。所以我得到像 4472900 64 64 这样的十进制值。这不是预期的。
  • @9113303 你为什么使用as.character?我不明白你的评论。你有一份因素清单吗?
  • @TimBiegeleisen 我认为这是一个整数向量列表,OP 说它是空格分隔的,因为这就是你打印时的样子。
  • @duckmayr 我添加了一个解决方案,以防你是对的。
【解决方案2】:

谢谢。as.numeric(paste(as.character(Mylist[[i]]),collapse = "")) 解决了这个问题。

【讨论】:

    【解决方案3】:

    包(StringR)

    下面的代码允许查找某些字符并删除或替换

    代码 str_replace_all(x, " ", "")

    与你有关

    str_replace_all(list, " ", "")

    解释

    str_replace_all(Dataset, "你正在查找的字符 ", "替换字符 ")

    如果只针对某一行,请务必执行以下操作

    str_replace_all(Dataset$Row, "你正在查找的字符 ", "替换字符 ")

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多