迭代R数据帧中的列名以更改其类型
但它会抛出迭代R数据帧中的列名以更改其类型,r,R,但它会抛出 f <- function(x) {x <- mdy(x)} newdf <- apply(df,2,f) 新的DF很糟糕: Warning messages: 1: All formats failed to parse. No formats found. ... 10: All formats failed to parse. No formats found. 我在做什么,这就是st00pid 所以,一旦完成,我们想做一些约会数学 Col.
f <- function(x) {x <- mdy(x)}
newdf <- apply(df,2,f)
新的DF很糟糕:
Warning messages:
1: All formats failed to parse. No formats found.
...
10: All formats failed to parse. No formats found.
我在做什么,这就是st00pid
所以,一旦完成,我们想做一些约会数学
Col.a Col.b Col.c Project1.start Project1.end Project2.start Project2.end Col.f
[1,] NA NA NA NA NA NA NA NA
[2,] NA NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA NA
Project1.duration Project2.duration
[1,] NA NA
[2,] NA NA
[3,] NA NA
df$Project1.duration您的错误是因为您的apply
将mdy
应用于df
的每一列,而不仅仅是“ProjectX.{start,end}”列。另外,因为df[col]
是一个数据帧
,而mdy
需要一个向量——请尝试df[[col]]
e、 g
(可能带有某种ID变量,这样您就可以知道哪个项目2与哪个项目1对应)
然后您可以轻松地执行mydf$duration您的错误是因为您的apply
将mdy
应用于df
的每一列,而不仅仅是“ProjectX.{start,end}”列。另外,因为df[col]
是一个数据帧
,而mdy
需要一个向量——请尝试df[[col]]
e、 g
(可能带有某种ID变量,这样您就可以知道哪个项目2与哪个项目1对应)
然后,您可以轻松地执行类似这样的mydf$duration:for(col in 1:10)df[col]是的,这就是我一直在尝试的,即使使用seq()
使它变得漂亮。但它抛出3:All格式无法解析。找不到任何格式。我在newdf中使用for(col in 4:7){newdf[col]不使用apply
,它将对象转换为一个不处理混合类型的矩阵,方法如下:for(col in 1:10)df[col]是的,这就是我尝试的,即使使用seq()
使其美观。但它抛出3:All格式无法解析。找不到任何格式。并且我在newdf中使用for(col in 4:7)得到了NA{newdf[col]不使用apply
,它将对象转换为不处理混合类型的矩阵
Col.a Col.b Col.c Project1.start Project1.end Project2.start Project2.end Col.f
[1,] NA NA NA NA NA NA NA NA
[2,] NA NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA NA
Project1.duration Project2.duration
[1,] NA NA
[2,] NA NA
[3,] NA NA
df$Project1.duration <- (df$Project1.end - df$Project1.start )
df$Project2.duration <- (df$Project2.end - df$Project2.start )
cols <- grep('Project', names(df))
# do a one-liner like this
df[cols] <- lapply(df[cols], mdy)
# or a loop like this if you want
for (col in cols) {
df[[col]] <- mdy(df[[col]])
}
projects <- paste0('Project', 1:2) # however many projects
df[paste0(projects, '.duration')] <- df[paste0(projects, '.end')] - df[paste0(projects, '.start')]
Project start end duration
1 ...
1
1
2
2
2