【发布时间】:2018-07-05 00:31:42
【问题描述】:
我在 R 中有一个 df,我使用以下方法加载:
data <- fread("Data/LuminateDataExport_UTDP2_011818.csv", colClasses = 'character', stringsAsFactors = FALSE)
我这样做是因为我必须执行某些操作,例如剥离“$”等。
现在,我正在尝试将列转换为适当的格式,而不必单独 as._ 每一列...
当前df的结构是:
> str(data)
Classes ‘data.table’ and 'data.frame': 196879 obs. of 32 variables:
$ city : chr "" "" "" "" ...
$ company_goal : chr "" "" "" "" ...
$ company_name : chr "" "" "" "" ...
$ event_date : chr "5/14/2016" "9/26/2015" "9/12/2015" "6/3/2017" ...
$ event_year : chr "FY 2016" "FY 2016" "FY 2016" "FY 2017" ...
$ fundraising_goal : chr "250" "200" "350" "0" ...
$ name : chr "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" ...
$ participant_id : chr "2323216" "2273391" "2419569" "4088558" ...
$ state : chr "" "OH" "TX" "" ...
$ street : chr "" "" "" "" ...
$ team_average : chr "176" "123" "306" "47" ...
$ team_captain : chr "No" "No" "Yes" "No" ...
$ team_count : chr "7" "6" "4" "46" ...
$ team_id : chr "152788" "127127" "45273" "179207" ...
$ team_member_goal : chr "0" "0" "0" "0" ...
$ team_name : chr "Team Clayton" "Cardiac Crusaders" "BIS - Team Myers" "Independent Walkers" ...
$ team_total_gifts : chr "1,230 " "738" "1,225 " "2,145 " ...
$ zip : chr "" "" "" "" ...
$ gifts_count : chr "2" "1" "2" "1" ...
$ registration_gift: chr "No" "No" "No" "No" ...
$ participant_gifts: chr "236" "218" "225" "0" ...
$ personal_gift : chr "0" "0" "0" "250" ...
$ total_gifts : chr "236" "218" "225" "250" ...
$ match_code : chr "UX000" "UX000" "UX000" "UX000" ...
$ tap_level : chr "X" "X" "X" "X" ...
$ tap_desc : chr "" "" "" "" ...
$ tap_lifed : chr "" "" "" "" ...
$ medage_cy : chr "0" "0" "0" "0" ...
$ divindx_cy : chr "0" "0" "0" "0" ...
$ medhinc_cy : chr "0" "0" "0" "0" ...
$ meddi_cy : chr "0" "0" "0" "0" ...
$ mednw_cy : chr "0" "0" "0" "0" ...
- attr(*, ".internal.selfref")=<externalptr>
现在,作为第一步 - 我正在尝试转换所有数字 to_numeric。
我已经尝试了here 找到的每一种解决方案,但都没有奏效。
我不断遇到的错误是:
[.data.table(data, , cols) 中的错误:j(内部的第二个参数 [...]) 是单个符号,但未找到列名 'cols'。可能 您打算使用 DT[,..cols] 或 DT[,cols,with=FALSE]。这种差异到 data.frame 是经过深思熟虑的,并在 FAQ 1.1 中进行了解释。
与
[.data.table(data, cols) 中的错误:当 i 是 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>)
请给点建议?
(一旦我这样做了,我还必须将不同的列转换为因子等)
【问题讨论】:
-
请 (a) 分享一个可重现的小例子。可以复制/粘贴的东西,例如
dput(data[1:6, 1:11])。然后也请展示你的一些尝试。您是否希望自动检测课程?你是手工挑选数字列吗?按名称或索引?如果是这样,您能否也分享一下,这样我们就不必猜测了? -
您看到的错误可能是可以修复的,但是如果您不共享产生它们的代码,则很难提供帮助。
-
@Gregor 我已经添加了您要求的信息...我正在寻找一种手动分类列的通用方法...自动检测将不起作用-关键是将多个列分类为一个调用而不是手动执行每个操作。我可以按数字或按名称选择列 - 这并不重要。
-
我看到了数据。我仍然看不到(a)您使用的代码会产生您得到的错误,或(b)任何告诉我(或可以告诉 R)您希望将哪些列设为数字的内容。我也不确定您为什么认为自动检测不起作用 - 您是否担心 R 会做太多工作?
-
@Gregor- 由于特殊字符,自动检测不起作用,这就是为什么我必须以字符形式读取数据...至于我尝试了哪些解决方案,我使用了每一个解决方案在问题中提供的链接中提供...它们都产生相同的错误
标签: r dataframe type-conversion