【问题标题】:how to read numerical values as a numeric object in r如何在r中读取数值作为数字对象
【发布时间】:2019-09-22 22:00:34
【问题描述】:

我有一个表格,其中有一列包含一些文本,一列包含一些数字。我的问题是:如何读取此表,使带有字符的列成为列字符,而数字列成为数字列。

【问题讨论】:

  • 如果是读取.txt.csv文件,你试过read.tableread.csv
  • 根据您的数据描述,您应该默认获取这些列类型,除非发生其他情况,例如列中的混合数字+字符。您需要提供数据示例。

标签: r class import


【解决方案1】:

一种选择是通过分组变量split 列。在这里,一个更简单的选择是将 character 列(如果它是 factor 列 - 使用 as.character 转换为 character 类)到 numeric 以便所有非数字元素将是 @987654327 @,然后使用is.na 转换为逻辑向量并将split 原始列转换为listvector。在更正length 后,可以通过在末尾填充NAs 将其转换回data.frame。

lst1 <- with(df1, split(col, !is.na(as.numeric(col))))
mx <- max(lengths(lst1))
out <- data.frame(lapply(lst1, `length<-`, mx), stringsAsFactors = FALSE)
out <- type.convert(out, as.is = TRUE)
names(out) <- paste0("col", seq_along(out))
str(out)
#'data.frame':  4 obs. of  2 variables:
# $ col1: chr  "A" "D" "eff1" NA
# $ col2: int  1 2 3 4

数据

df1 <- data.frame(col = c(1, 2, 3, 'A', 4, 'D', 'eff1'), stringsAsFactors = FALSE)

【讨论】:

  • 我认为 OP 没有包含混合数字和字符的列。他们说“一列有一些文字,一列有一些数字。”
  • @neilfws 我认为 OP 想要这个解决方案。你能删除你的cmets吗
  • 当然。当 OP 澄清时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2016-08-23
  • 2022-06-11
  • 2021-08-02
相关资源
最近更新 更多