如何将数据集中的每个元素分解为其组成部分?

时间:2019-05-05 04:39:23

标签: r function lapply

所以我有一个相对简单的问题(我认为那里的问题可能有些重复),但是我似乎无法弄清楚,我将非常感谢您的帮助。

我有一个数据集,并且在一列中有多行不同的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)

我希望得到一个显示如下内容的输出:

endresult

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

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]中的错误:'buildin'类型的对象不可子集化”或“ mutate_impl(.data,点)中的错误:评估错误:'to'的长度必须为1。'

将非常感谢您的任何建议。谢谢!

2 个答案:

答案 0 :(得分: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

此答案避免了从数字到字符的潜在不必要的转换。

答案 1 :(得分:0)

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

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