迭代数据框并进行比较

时间:2015-11-18 02:57:14

标签: r dataframe levels

所以说我有一个非常简单的数据框:

  v    h  ptsv  ptsh
PIT   NE    21    28
 GB   KC    31    23 
CHI  HOU    27    20

它包含访问者(v)和主页(h)列,并且得分(ptsvptsh)列得分。我想在数据框中创建一个新列,用于比较得分并输入主队或客队首字母。

我写了这段代码:

tbl2$win <- rep("x",nrow(tbl2)) <BR>
tbl2$win <- ifelse(tbl2$ptsh > tbl2$ptsv,  tbl2$h, tbl2$v)

不是打印出首字母,而是打印出按字母顺序排列的数字。 R还是新手。

2 个答案:

答案 0 :(得分:2)

CREATE FUNCTION dbo.GetAllDates(@Start DATETIME, @End DATETIME)
RETURNS
@AllDates TABLE
(
TheDate DATETIME
)
AS
BEGIN

    IF @Start > @End
    BEGIN
        DECLARE @Temp DATETIME
        SET @Temp = @Start
        SET @Start = @End
        SET @End = @Temp
    END

    WHILE @Start <= @End
    BEGIN
        INSERT INTO @AllDates
        VALUES(@Start)

        SET @Start = DATEADD(DAY, 1, @Start)

    END

RETURN

END

您的第一行代码不是必需的

答案 1 :(得分:1)

factor中有data.frame个数据,这会使ifelse混淆:

str(tbl2)
#'data.frame':   3 obs. of  4 variables:
# $ v   : Factor w/ 3 levels "CHI","GB","PIT": 3 2 1
# $ h   : Factor w/ 3 levels "HOU","KC","NE": 3 2 1
# ...

来自?ifelse帮助页面示例:

  

## ifelse()剥离属性
  ##在使用日期和因子时非常重要

首先使用as.character转换这些列:

tbl2[c("v","h")] <- lapply(tbl2[c("v","h")], as.character)
ifelse(tbl2$ptsh > tbl2$ptsv,  tbl2$h, tbl2$v)
#[1] "NE"  "GB"  "CHI"