如何改变R中多列的数据类型?

icomxhvb  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(197)

我正在处理一个初学者的案例研究,我已经在R中上传了相关数据。但是当我检查多列中的数据类型时出现了一个问题。
我希望将字符格式更改为3列数字,即:
1)开始时间
2)结束时间
3)行驶_长度
最初,我成功地转换了格式,但收到了一个错误- NA 's by conforcement。我还尝试更改CSV文件的格式并再次上传,但这不起作用。您能帮助我纠正这个问题吗?
我附上了一张截图供您考虑。
问候你,沙纳瓦斯
根据堆栈溢出中的一个查询的说明,我使用了以下代码:

cols.num <- c("started_at","ended_at","ride_length")
jan_2022[cols.num] <- sapply(jan_2022[cols.num], as.numeric)
sapply(jan_2022,class)
summary(jan_2022)

它确实将数据类型更改为数字,但我收到了一个错误- NA 's by conforcement. Screenshot
编辑:共享数据供您参考。

structure(list(ride_id = c("C2F7DD78E82EC875", "A6CF8980A652D272", 
"BD0F91DFF741C66D", "CBB80ED419105406", "DDC963BFDDA51EEA"), 
    rideable_type = c("electric_bike", "electric_bike", "classic_bike", 
    "classic_bike", "classic_bike"), started_at = c("1/13/2022 11:59", 
    "1/10/2022 8:41", "1/25/2022 4:53", "1/4/2022 0:18", "1/20/2022 1:31"
    ), ended_at = c("1/13/2022 12:02", "1/10/2022 8:46", "1/25/2022 4:58", 
    "1/4/2022 0:33", "1/20/2022 1:37"), start_station_name = c("Glenwood Ave & Touhy Ave", 
    "Glenwood Ave & Touhy Ave", "Sheffield Ave & Fullerton Ave", 
    "Clark St & Bryn Mawr Ave", "Michigan Ave & Jackson Blvd"
    ), start_station_id = c("525", "525", "TA1306000016", "KA1504000151", 
    "TA1309000002"), end_station_name = c("Clark St & Touhy Ave", 
    "Clark St & Touhy Ave", "Greenview Ave & Fullerton Ave", 
    "Paulina St & Montrose Ave", "State St & Randolph St"), end_station_id = c("RP-007", 
    "RP-007", "TA1307000001", "TA1309000021", "TA1305000029"), 
    start_lat = c(42.0128005, 42.012763, 41.92560188, 41.983593, 
    41.87785), start_lng = c(-87.665906, -87.6659675, -87.65370804, 
    -87.669154, -87.62408), end_lat = c(42.01256012, 42.01256012, 
    41.92533, 41.961507, 41.88462107), end_lng = c(-87.67436712, 
    -87.67436712, -87.6658, -87.671387, -87.62783423), member_casual = c("casual", 
    "casual", "member", "casual", "member"), ride_length = c("0:02:57", 
    "0:04:21", "0:04:21", "0:14:56", "0:06:02"), day_of_week = c(5L, 
    2L, 3L, 3L, 5L)), row.names = c(NA, 5L), class = "data.frame")
aiqt4smr

aiqt4smr1#

通过您提供的数据,我可以看到列started_atended_atride_length实际上表示日期和时间,它们在R中不能很好地表示为数字,而是具有特殊的类。
有一个简单的方法可以从一开始就做到这一点:
如果您使用的是RStudio,您可以通过图形界面读取数据,该界面允许您事先手动设置列的数据类型。
要打开此界面,请转到文件-〉导入数据集-〉从文本(readr)...
然后您可以点击“浏览”按钮选择您的.csv文件。
预览显示后,您应该能够从对应列名正下方的下拉菜单中选择所需的数据类型。在您的情况下,您应该为started_atended_at选择“DateTime”格式,为ride_length选择“Time”格式。
在右下角,代码是自动生成的。你可以复制它,将它包含在你的脚本中,从而使这个过程可以重复。

背景信息

NA在文本数据不能自动转换为您选择的类型时生成。这可能是正确的行为,并且非常有用。
但是,如果您认为该位置不应出现NA,则可能是由于:

  • 为列选择了错误的数据类型
  • 该数据包含奇怪的文本串或其它非常规格式。

相关问题