R 将不同的列转换为不同的格式

R 将不同的列转换为不同的格式,r,dataframe,type-conversion,R,Dataframe,Type Conversion,我在R中有一个df,我使用以下方式加载: data <- fread("Data/LuminateDataExport_UTDP2_011818.csv", colClasses = 'character', stringsAsFactors = FALSE) 现在,作为第一步-我正在尝试将所有的数字转换为数字 我已经尝试了找到的每一个解决方案,但没有一个有效 我经常遇到的错误有: [.data.table(数据,cols)中出错:j(内部的第二个参数 […])是单个符号,但找不到列名“

我在R中有一个df,我使用以下方式加载:

data <- fread("Data/LuminateDataExport_UTDP2_011818.csv", colClasses = 'character', stringsAsFactors = FALSE)
现在,作为第一步-我正在尝试将所有的数字
转换为数字

我已经尝试了找到的每一个解决方案,但没有一个有效

我经常遇到的错误有:

[.data.table
(数据,cols)中出错:j(内部的第二个参数 […])是单个符号,但找不到列名“cols”。可能是 您打算使用DT[,…cols]或DT[,cols,with=FALSE]。此差异用于 data.frame经过深思熟虑,并在常见问题解答1.1中进行了解释

[.data.table
(data,cols)中出错:当我是data.table(或 字符向量),必须指定要联接的列 使用“on=”参数(参见?data.table)或键入x(即排序), 并且,标记为已排序,请参见?setkey)。键控联接可能具有更高的性能 由于x在RAM中被排序,因此在非常大的数据上有速度优势

以下是有关数据的更多信息:

> dput(data[1:6, 1:11])
structure(list(city = c("", "", "", "", "", ""), company_goal = c("", 
"", "", "", "", ""), company_name = c("", "", "", "", "", ""), 
    event_date = c("5/14/2016", "9/26/2015", "9/12/2015", "6/3/2017", 
    "5/6/2017", "10/17/2015"), event_year = c("FY 2016", "FY 2016", 
    "FY 2016", "FY 2017", "FY 2017", "FY 2016"), fundraising_goal = c("250", 
    "200", "350", "0", "0", "100"), name = c("Heart Walk 2015-2016 St. Louis MO", 
    "Heart Walk 2015-2016 Canton, OH", "Heart Walk 2015-2016 Dallas, TX", 
    "FDA HW 2016-2017 Albany, NY WO-65355", "FDA HW 2016-2017 New Haven, CT WO-66497", 
    "Heart Walk 2015-2016 Puget Sound, WA"), participant_id = c("2323216", 
    "2273391", "2419569", "4088558", "4527010", "2424207"), state = c("", 
    "OH", "TX", "", "", "WA"), street = c("", "", "", "", "", 
    ""), team_average = c("176", "123", "306", "47", "0", "97"
    )), .Names = c("city", "company_goal", "company_name", "event_date", 
"event_year", "fundraising_goal", "name", "participant_id", "state", 
"street", "team_average"), class = c("data.table", "data.frame"
), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x10200c378>)
dput(数据[1:6,1:11]) 结构(列表(城市=c(“,”,“,”,“,”,“,”),公司目标=c(“,”, ,,,,,,,,,公司名称=c(,,,,,,,,,), 事件日期=c(“2016年5月14日”、“2015年9月26日”、“2015年9月12日”、“2017年6月3日”, “2017年5月6日”、“2015年10月17日”,事件年份=c(“2016财年”、“2016财年”, “2016财年”、“2017财年”、“2017财年”、“2016财年”),筹款目标=c(“250”, “200”、“350”、“0”、“0”、“100”),名称=c(“2015-2016年密苏里州圣路易斯市心脏病散步”, “俄亥俄州坎顿市2015-2016年心脏病步行”、“德克萨斯州达拉斯市2015-2016年心脏病步行”, “FDA HW 2016-2017纽约州奥尔巴尼WO-65355”、“FDA HW 2016-2017纽约州纽黑文WO-66497”, “华盛顿州普吉特湾2015-2016年心脏步行”,参与者id=c(“2323216”, “2273391”、“2419569”、“4088558”、“4527010”、“2424207”),状态=c(“, “OH”、“TX”、“TX”、“WA”)、street=c(“、”、“、”、“、”、”、“、”, )、团队平均值=c(“176”、“123”、“306”、“47”、“0”、“97” )),.name=c(“城市”、“公司目标”、“公司名称”、“活动日期”, “活动年”、“筹款目标”、“姓名”、“参与者id”、“状态”, “街道”、“团队平均值”),等级=c(“数据表”、“数据框” ),row.names=c(NA,-6L),.internal.selfref=)
有什么建议吗


(一旦我这样做了,我还必须将不同的列转换为因子等)

我意识到这是一个你可能不再研究的老问题,但由于这是人们搜索同时将R中的多个列格式化为数字时出现的第一个问题之一,我想我应该添加一个想法

关于你问题的第一部分——如何识别哪些列是数字,哪些列是日期,哪些列是因子等等——我没有一个好的答案,特别是因为因子最初可以是字符或其他形式,但后来被指定为因子r、 如果没有可接受为NA的条目,则可以使用逻辑确定哪些列应设置为数字格式。一旦确定要转换的列

我猜出现第二个错误是因为您使用的数据表与当前语法要求略有不同。您可以在本文后面的一个答案中找到使用数据表语法更改选定列的说明:

在那篇文章中,它们强制一组列为factor;强制为numeric的过程也是一样的

为了简单起见,您可以指定所需的列(使用数值或列名或其他方式——在您的情况下,将使用将数据划分为组所应用的任何逻辑和规则以编程方式指定此值)


这应该可以完成转换。对您喜欢的任意多个数据类型重复此过程,将格式从as.numeric更改为任何合适的类型。

我意识到这是一个您可能不再研究的老问题,但因为这是人们同时搜索数据时最先出现的问题之一在R中将多个列格式化为数字,我想我应该添加一个想法

关于你问题的第一部分——如何识别哪些列是数字,哪些列是日期,哪些列是因子等等——我没有一个好的答案,特别是因为因子最初可以是字符或其他形式,但后来被指定为因子r、 如果没有可接受为NA的条目,则可以使用逻辑确定哪些列应设置为数字格式。一旦确定要转换的列

我猜出现第二个错误是因为您使用的数据表与当前语法要求略有不同。您可以在本文后面的一个答案中找到使用数据表语法更改选定列的说明:

在那篇文章中,它们强制一组列为factor;强制为numeric的过程也是一样的

为了简单起见,您可以指定所需的列(使用数值或列名或其他方式——在您的情况下,将使用将数据划分为组所应用的任何逻辑和规则以编程方式指定此值)


这将完成您的转换。对您喜欢的任意多个数据类型重复此过程,将格式从as.numeric更改为适当的类型。

请(a)分享一个小的、可复制的示例。一些可复制/粘贴的内容,如
dput(数据[1:6,1:11])
。然后请展示您的一些尝试。您是否希望自动检测类?您是否手动选择数字列?按名称或索引?如果是,您是否也可以共享,这样我们就不必猜测了?您看到的错误可能是可以修复的,但如果您不共享生成它们的代码,则很难提供帮助。@Gregor我已经添加了我收到了你要求的信息…我
> dput(data[1:6, 1:11])
structure(list(city = c("", "", "", "", "", ""), company_goal = c("", 
"", "", "", "", ""), company_name = c("", "", "", "", "", ""), 
    event_date = c("5/14/2016", "9/26/2015", "9/12/2015", "6/3/2017", 
    "5/6/2017", "10/17/2015"), event_year = c("FY 2016", "FY 2016", 
    "FY 2016", "FY 2017", "FY 2017", "FY 2016"), fundraising_goal = c("250", 
    "200", "350", "0", "0", "100"), name = c("Heart Walk 2015-2016 St. Louis MO", 
    "Heart Walk 2015-2016 Canton, OH", "Heart Walk 2015-2016 Dallas, TX", 
    "FDA HW 2016-2017 Albany, NY WO-65355", "FDA HW 2016-2017 New Haven, CT WO-66497", 
    "Heart Walk 2015-2016 Puget Sound, WA"), participant_id = c("2323216", 
    "2273391", "2419569", "4088558", "4527010", "2424207"), state = c("", 
    "OH", "TX", "", "", "WA"), street = c("", "", "", "", "", 
    ""), team_average = c("176", "123", "306", "47", "0", "97"
    )), .Names = c("city", "company_goal", "company_name", "event_date", 
"event_year", "fundraising_goal", "name", "participant_id", "state", 
"street", "team_average"), class = c("data.table", "data.frame"
), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x10200c378>)
colsToConvert <- c(6,11,13)
colsToConvert <- c("fundraising_goal","team_average","team_count")
data[, (colsToConvert) := lapply(.SD, as.numeric), .SDcols = colsToConvert]