Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将列添加到数据框,测试其他列中的分类变量_R_For Loop_Dataframe_Conditional Statements_Calculated Columns - Fatal编程技术网

R 将列添加到数据框,测试其他列中的分类变量

R 将列添加到数据框,测试其他列中的分类变量,r,for-loop,dataframe,conditional-statements,calculated-columns,R,For Loop,Dataframe,Conditional Statements,Calculated Columns,我提到: , 及 所有示例都基于测试其他列中的数值向量或NA,并添加新变量。下面是一个简短的可复制示例: x <- c("dec 12", "jan 13", "feb 13", "march 13", "apr 13", "may 13", "june 13", "july 13", "aug 13", "sep 13", "oct 13", "nov 13") y <- c(234, 678, 534, 122, 179, 987, 872, 730, 295

我提到:

  • ,
所有示例都基于测试其他列中的数值向量或NA,并添加新变量。下面是一个简短的可复制示例:

x <- c("dec 12", "jan 13", "feb 13", "march 13", "apr 13", "may 13",
       "june 13", "july 13", "aug 13", "sep 13", "oct 13", "nov 13")
y <- c(234, 678, 534, 122, 179, 987, 872, 730, 295, 450, 590, 312)
df<-data.frame(x,y)
我知道这是一种非常低效的做事方式,但我是一个新手和一个笨手笨脚的人。它返回了错误:

Error in ifelse(df[1:3, ], "winter", ifelse(df[4:6, ], "spring",
ifelse(df[7:9,  : (list) object cannot be coerced to type 'logical'

如果同一个数据框有数千行,我想循环遍历它,并根据一年中的月份为季节创建一个新变量,我该怎么做呢?我提到:“但这是循环并设置数学运算符来创建新变量。我尝试了外部资源:和。然而,两者都是基于数值变量和条件

如果您有一个非常大的数据帧,那么
data.table
将对您非常有帮助。以下工作:

library(data.table)
x <- c("dec 12", "jan 13", "feb 13", "march 13", "apr 13", "may 13",
   "june 13", "july 13", "aug 13", "sep 13", "oct 13", "nov 13")
y <- c(234, 678, 534, 122, 179, 987, 872, 730, 295, 450, 590, 312)
df <-data.frame(x,y)
DT <- data.table(df)
DT[, month := substr(tolower(x), 1, 3)]
DT[, season := ifelse(month %in% c("dec", "jan", "feb"), "winter",
               ifelse(month %in% c("mar", "apr", "may"), "spring",
               ifelse(month %in% c("jun", "jul", "aug"), "summer", 
               ifelse(month %in% c("sep", "oct", "nov"), "autumn", NA))))]
DT
          x   y month season
1:   dec 12 234   dec winter
2:   jan 13 678   jan winter
3:   feb 13 534   feb winter
4: march 13 122   mar spring
5:   apr 13 179   apr spring
6:   may 13 987   may spring
7:  june 13 872   jun summer
8:  july 13 730   jul summer
9:   aug 13 295   aug summer
0:   sep 13 450   sep autumn
1:   oct 13 590   oct autumn
12:  nov 13 312   nov autumn
库(data.table)

这个答案应该对你有帮助:@beetroot,我刚才也在想同样的事情;-)我会从
Months@beetroot开始是的,当r将月份名称识别为
month.abb
时,这将起作用。但是我们从数据库中获取报告时,月份或日期列通常非常混乱。我可以学习一个正则表达式来添加一个日期格式为R?“还是我把事情复杂化了?”流浪汉,这是一个有点不同的问题。我想说的是,第一步是把你所有的约会都转换成一种通用的格式。这很有效!谢谢你是在哪里发现data.table包的?一定要从源代码做起一些练习。
data.table
几周前我发现的,因为这里的专家。太壮观了D
library(data.table)
x <- c("dec 12", "jan 13", "feb 13", "march 13", "apr 13", "may 13",
   "june 13", "july 13", "aug 13", "sep 13", "oct 13", "nov 13")
y <- c(234, 678, 534, 122, 179, 987, 872, 730, 295, 450, 590, 312)
df <-data.frame(x,y)
DT <- data.table(df)
DT[, month := substr(tolower(x), 1, 3)]
DT[, season := ifelse(month %in% c("dec", "jan", "feb"), "winter",
               ifelse(month %in% c("mar", "apr", "may"), "spring",
               ifelse(month %in% c("jun", "jul", "aug"), "summer", 
               ifelse(month %in% c("sep", "oct", "nov"), "autumn", NA))))]
DT
          x   y month season
1:   dec 12 234   dec winter
2:   jan 13 678   jan winter
3:   feb 13 534   feb winter
4: march 13 122   mar spring
5:   apr 13 179   apr spring
6:   may 13 987   may spring
7:  june 13 872   jun summer
8:  july 13 730   jul summer
9:   aug 13 295   aug summer
0:   sep 13 450   sep autumn
1:   oct 13 590   oct autumn
12:  nov 13 312   nov autumn