R 使用data.table替换值并转换为数字
假设我有以下数据(我知道这很混乱,但请耐心听我说):R 使用data.table替换值并转换为数字,r,data.table,R,Data.table,假设我有以下数据(我知道这很混乱,但请耐心听我说): a对于gsub您不需要lappy,因为您只想更改第二行。另外,如果使用type.convert更改列类,则无需担心奇偶列 library(data.table) df[2, names(df) := as.list(gsub('Year ', '', df[2]))] df <- type.convert(df, as.is = TRUE) 库(data.table) df[2,名称(df):=as.list(gsub('Year'
a对于gsub
您不需要lappy
,因为您只想更改第二行。另外,如果使用type.convert
更改列类,则无需担心奇偶列
library(data.table)
df[2, names(df) := as.list(gsub('Year ', '', df[2]))]
df <- type.convert(df, as.is = TRUE)
库(data.table)
df[2,名称(df):=as.list(gsub('Year','',df[2]))
df第一部分:df[2,名称(df):=lapply(.SD,函数(x)gsub(“年”,“年”,x))]
在数据导入期间应跳过第一行。第二行应该是列标题。然后,作为第一步,您将转换为长格式。@罗兰,在正常情况下我同意,但在这种情况下,我只是被要求做一些小修改(例如,将一些数字四舍五入并编辑第一列中的特征标签),而无需进行分析,也无需更改表格的整体格式。我确信有一种更简单的方法可以用另一种编程语言实现,但我(目前)没有时间学习其他方法,所以我现在还是坚持使用R。(虽然也许在R中有一种更简单的方法我不知道。)这非常有效——谢谢!我想知道你(或者任何人,真的)是否能告诉我为什么我会收到上面的错误消息。我想了解问题是什么,以防将来遇到类似的问题。另外,如果我有一个对应于列位置的数字向量(正如我在上面用“I”所做的那样),那么.I
表示法是否正确?在这种情况下,我将如何使用它?我只是想边走边学。
df[2] #gives me entire second row
length(df[2]) #11
gsub("Year ", "", df[2]) #Gives me desired output
length(gsub("Year ", "", df[2])) #11
(df[2] <- gsub("Year ", "", df[2])) #Error
Error in `[<-.data.table`(`*tmp*`, 2, value = c("Characteristic", "1", :
Supplied 11 items to be assigned to 1 items of column 'X1'. If you wish to 'recycle' the RHS please use rep() to make this intent clear to readers of your code.
df[2] <- lapply(df[2], gsub, pattern = "Year ", replacement = "") #Works
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11
1: Table Title <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
2: Characteristic 1 2 3 4 5
3: All 40 % 20 % 12 % 43 % 8 %
4: Male 22 % 14 % 8 % 39 % 4 %
(i <- grep("[0-9]", df[2])) #Index of desired columns
df[,i] <- as.numeric(df[,i]) #Doesn't work for data.table, as stated in documentation
df[,..i] #Selects proper columns
sapply(df[,..i], as.numeric) #Converts columns to numeric
df[,..i] <- sapply(df[,..i], as.numeric) #Object '..i' not found
Error in `[<-.data.table`(`*tmp*`, , ..i, value = c(NA, 1, 40, 22, NA, :
object '..i' not found
df[, .SD, .SDcols = i] #Selects proper columns
sapply(df[, .SD, .SDcols = i], as.numeric) #Converts to numeric
df[, .SD, .SDcols = i] <- sapply(df[, .SD, .SDcols = i], as.numeric) #unused argument (.SDcols = i)
Error in `[<-.data.table`(`*tmp*`, , .SD, .SDcols = i, value = c(NA, 1, :
unused argument (.SDcols = i)
df[, .SDcols=..i, ..i := lapply(.SD, as.numeric), ] #object '..i' not found
Error in eval(colsub, parent.frame(), parent.frame()) :
object '..i' not found
library(data.table)
df[2, names(df) := as.list(gsub('Year ', '', df[2]))]
df <- type.convert(df, as.is = TRUE)