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)