【问题标题】:How to break each element in a dataset into its constituent parts? [duplicate]如何将数据集中的每个元素分解为其组成部分? [复制]
【发布时间】:2019-09-23 03:02:32
【问题描述】:

所以我有一个相对简单的问题(我认为我的问题可能有一些重复)但我似乎无法弄清楚,我真的很感激任何和所有的帮助。

我有一个数据集,在一列中,我有多行不同的 11 位数字。我希望获得每个数字的最后 6 位数字,并希望能够在我的数据集中创建一个带有结果的新列。

下面是一个例子:

random_num <- c(11001100100, 11001100300, 11001100400,
                11001100501, 11001100502, 11001100600)
random_stuff <- c(2, 5, 6, 2, 5, 3)
data_frame <- cbind(random_num, random_stuff)

我希望得到这样的输出:

到目前为止,这就是我所拥有的:

conversion <- function (x) {
  for (i in nrow(x)) 
  {
  c <- as.character[i]
  be <- substring(c, seq(1, nchar(c), 1), seq(1, nchar(c), 1))
  ad <- paste(be[6], be[7], be[8], be[9], be[10], be[11], sep = "")
  final <- as.numeric(ad)
  return(final)
  }
}

finalr <- conversion(data_frame)
finalr

但我要么收到错误消息,说明

'as.character[i] 中的错误:'builtin' 类型的对象不是可子集的'或'mutate_impl(.data,dots) 中的错误:评估错误:'to' 的长度必须为 1。'

非常感谢任何建议。谢谢!

【问题讨论】:

  • as.character 是一个函数。您正在尝试使用该功能提取一些东西([
  • 您的样本数据与截图不符。
  • 您显示的是矩阵而不是 data.frame。此外,substring/substr 是矢量化的,因此无需循环,即 substr(as.character(data_frame[,1]), nchar(data_frame[,1])-6, nchar(data_frame[,1]))
  • 这样的事情会起作用substring(df[, 1], nchar(df[, 1]) - 5)

标签: r function lapply


【解决方案1】:

据我所知,result 列/向量只是random_num 向量的最后六位数字。因此,我们可以使用模数来计算:

random_num <- c(1100100100, 1100100300, 1100100400,
                1100100501, 1100100502, 1100100600)
result <- random_num %% 1000000
result

[1] 100100 100300 100400 100501 100502 100600

此答案避免了从数字到字符的可能不必要的强制转换。

【讨论】:

  • @akrun 再试一次。 OP 在其样本数据中有错字。现在上面使用了实际匹配预期输出的版本。
  • 是的,现在可以了,我一直在摸不着R版本是否错误
【解决方案2】:

我已将您的数据集转换为数据框:

random_num <- c(11001100100, 11001100300, 11001100400,
                11001100501, 11001100502, 11001100600)
random_stuff <- c(2, 5, 6, 2, 5, 3)
data_frame <- data.frame(random_num, random_stuff)

data_frame$result <- substring(data_frame$random_num, nchar(data_frame$random_num)-6+1)


> data_frame
   random_num random_stuff result
1 11001100100            2 100100
2 11001100300            5 100300
3 11001100400            6 100400
4 11001100501            2 100501
5 11001100502            5 100502
6 11001100600            3 100600

【讨论】:

    猜你喜欢
    • 2011-02-11
    • 2017-09-28
    • 2019-02-07
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    相关资源
    最近更新 更多