Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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_Csv - Fatal编程技术网

R:写入函数以更改表列的类型

R:写入函数以更改表列的类型,r,csv,R,Csv,假设您有几个CSV表,如 Foo Date1 Date2 bar 2010-03-05 2023-09-09 ... [table1] 或 在使用read.csv解析这些表之后,我想将包含日期的collumn转换为内部日期类型 你可以用它来做这件事 table1$Date1 <- as.Date(table1$Date1, "%Y-%m-%d") table1$Date2 <- as.Date(table1$Date2, "%Y-%m-%d") table2$Date <-

假设您有几个CSV表,如

Foo Date1 Date2
bar 2010-03-05 2023-09-09
...
[table1]

在使用read.csv解析这些表之后,我想将包含日期的collumn转换为内部日期类型

你可以用它来做这件事

table1$Date1 <- as.Date(table1$Date1, "%Y-%m-%d")
table1$Date2 <- as.Date(table1$Date2, "%Y-%m-%d")
table2$Date <- as.Date(table2$Date, "%Y-%m-%d")
但是如何定义转换日期呢

我已经尝试过(在一个简单的单参数案例中)类似的事情:

convertDate <- function(table, column) {
  table[[column]] <- as.Date(table[[column]], "%Y-%m-%d")
}

convertDate您必须传递列名列表并对其进行迭代。我附上下面的样本代码

convertDate <- function(table, columns) {
  for (column in columns){
    table[[column]] <- as.Date(table[[column]], "%Y-%m-%d")
  }
  return(table)
}
table2 = data.frame(Date='2042-01-01')
class(table2$Date)
table2 = convertDate(table2, 'Date')
class(table2$Date)
table1 = data.frame(Date1='2010-03-05', Date2='2023-09-09')
class(table1$Date1)
table1 = convertDate(table1, list('Date1','Date2'))
class(table1$Date1)
class(table1$Date2)

convertDate您必须传递列名列表并对其进行迭代。我附上下面的样本代码

convertDate <- function(table, columns) {
  for (column in columns){
    table[[column]] <- as.Date(table[[column]], "%Y-%m-%d")
  }
  return(table)
}
table2 = data.frame(Date='2042-01-01')
class(table2$Date)
table2 = convertDate(table2, 'Date')
class(table2$Date)
table1 = data.frame(Date1='2010-03-05', Date2='2023-09-09')
class(table1$Date1)
table1 = convertDate(table1, list('Date1','Date2'))
class(table1$Date1)
class(table1$Date2)
convertDatelapply可以在这里工作

tbl <- data.frame(bar = 1, Date1 = "2010-03-05", Date2 = "2023-09-09", stringsAsFactors = FALSE)
str(tbl)
# 'data.frame': 1 obs. of  3 variables:
#   $ bar  : num 1
# $ Date1: chr "2010-03-05"
# $ Date2: chr "2023-09-09"

tbl[, -1] <- as.data.frame(lapply(tbl[, -1], as.Date))
str(tbl)
# 'data.frame': 1 obs. of  3 variables:
# $ bar  : num 1
# $ Date1: Date, format: "2010-03-05"
# $ Date2: Date, format: "2023-09-09"
tbllappy可以在这里工作

tbl <- data.frame(bar = 1, Date1 = "2010-03-05", Date2 = "2023-09-09", stringsAsFactors = FALSE)
str(tbl)
# 'data.frame': 1 obs. of  3 variables:
#   $ bar  : num 1
# $ Date1: chr "2010-03-05"
# $ Date2: chr "2023-09-09"

tbl[, -1] <- as.data.frame(lapply(tbl[, -1], as.Date))
str(tbl)
# 'data.frame': 1 obs. of  3 variables:
# $ bar  : num 1
# $ Date1: Date, format: "2010-03-05"
# $ Date2: Date, format: "2023-09-09"

tbl您需要
substitute
或类似的东西。但是,您可以通过使用括号进行子集设置来同时解析多个列。您需要
替换
或类似的内容。不过,您可以通过使用括号进行子集设置来同时解析多个列。是的,这看起来像是我正在寻找的解决方案。除此之外,我还必须像'a'那样重新分配变量。这可以接受任意数量的列,而不需要省略号。例如,您可以输入
columns=2:3
,或者
columns=c(“Date1”、“Date2”)
,如果您愿意的话。是的,对不起,我刚刚识别了它。你完全正确。顺便说一句,如果你不想重新分配,你可以使用“是”,这看起来像是我正在寻找的解决方案。除此之外,我还必须像'a'那样重新分配变量。这可以接受任意数量的列,而不需要省略号。例如,您可以输入
columns=2:3
,或者
columns=c(“Date1”、“Date2”)
,如果您愿意的话。是的,对不起,我刚刚识别了它。你完全正确。顺便说一句,如果你不想重新分配,你可以使用我将接受NBATrends anwser,因为答案不需要任何循环。不过,你的答案很好,也很正确。我将接受NBATrends anwser,因为答案不需要任何循环。然而,你的答案很好,也是正确的。
convertDate <- function(table, columns) {
 table[, columns] <- as.data.frame(lapply(table[, columns, drop = FALSE], as.Date))
 return(table)
}