Вычислите дату от недельного числа

Попробуйте пакет dplyr для этого. Я делаю это, как мы надеемся, реальный код, но не запускал его, так как у меня нет фреймов данных.

По сути, мы выполняем внутреннее соединение с x и b (поэтому сохраняем только строки с совпадающими rs_ID и V4), а затем выбираем нужные столбцы.

библиотека (dplyr)

x %>%
  inner_join(b, by = c("rs_id" = "V4")) %>%
  select(gene_id, chr, rs_id, pvalue_G, pvalue_E, V2, V3)
128
задан Donald Duck 27 November 2017 в 22:18
поделиться

8 ответов

Неделя 1 определяется как являющийся неделей, которая запускается в понедельник и содержит первый четверг года.

0
ответ дан 24 November 2019 в 00:36
поделиться

Согласно ISO 8601:1988 , который используется в Швеции , первая неделя года является первой неделей, которая имеет по крайней мере четыре дня в течение нового года.

Поэтому, если Ваша неделя запускает в понедельник первый четверг, любой год в течение первой недели. Вы можете DateAdd или DateDiff от этого.

2
ответ дан 24 November 2019 в 00:36
поделиться

Лично я использовал бы в своих интересах информацию о культуре для получения дня недели и цикла вниз к первому дню культуры недели. Я не уверен, объясняю ли я это правильно, вот пример:

    public DateTime GetFirstDayOfWeek(int year, int weekNumber)
    {
        return GetFirstDayOfWeek(year, weekNumber, Application.CurrentCulture);
    }

    public DateTime GetFirstDayOfWeek(int year, int weekNumber,
        System.Globalization.CultureInfo culture)
    {
        System.Globalization.Calendar calendar = culture.Calendar;
        DateTime firstOfYear = new DateTime(year, 1, 1, calendar);
        DateTime targetDay = calendar.AddWeeks(firstOfYear, weekNumber);
        DayOfWeek firstDayOfWeek = culture.DateTimeFormat.FirstDayOfWeek;

        while (targetDay.DayOfWeek != firstDayOfWeek)
        {
            targetDay = targetDay.AddDays(-1);
        }

        return targetDay;
    }
3
ответ дан 24 November 2019 в 00:36
поделиться

Самый легкий путь состоит в том, чтобы, вероятно, найти первый понедельник года и затем добавить соответствующее число недель. Вот некоторый пример кода. Это принимает недельное число, запускающееся в 1, между прочим:

using System;

class Test
{
    static void Main()
    {
        // Show the third Tuesday in 2009. Should be January 20th
        Console.WriteLine(YearWeekDayToDateTime(2009, DayOfWeek.Tuesday, 3));
    }

    static DateTime YearWeekDayToDateTime(int year, DayOfWeek day, int week)
    {
        DateTime startOfYear = new DateTime (year, 1, 1);

        // The +7 and %7 stuff is to avoid negative numbers etc.
        int daysToFirstCorrectDay = (((int)day - (int)startOfYear.DayOfWeek) + 7) % 7;

        return startOfYear.AddDays(7 * (week-1) + daysToFirstCorrectDay);
    }
}
9
ответ дан 24 November 2019 в 00:36
поделиться

Мне нравится решение, предложенное Хенком Холтерманом. Но чтобы быть немного более независимым от культуры, вы должны получить первый день недели для текущей культуры (это не всегда понедельник):

using System.Globalization;

static DateTime FirstDateOfWeek(int year, int weekOfYear)
{
  DateTime jan1 = new DateTime(year, 1, 1);

  int daysOffset = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek - (int)jan1.DayOfWeek;

  DateTime firstMonday = jan1.AddDays(daysOffset);

  int firstWeek = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(jan1, CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule, CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek);

  if (firstWeek <= 1)
  {
    weekOfYear -= 1;
  }

  return firstMonday.AddDays(weekOfYear * 7);
}
36
ответ дан 24 November 2019 в 00:36
поделиться

с использованием Fluent DateTime http://fluentdatetime.codeplex.com/

        var year = 2009;
        var firstDayOfYear = new DateTime(year, 1, 1);
        var firstMonday = firstDayOfYear.Next(DayOfWeek.Monday);
        var weeksDateTime = 12.Weeks().Since(firstMonday);
2
ответ дан 24 November 2019 в 00:36
поделиться

Чтобы преобразовать в обоих направлениях, см. Здесь: Статья в Википедии о недельных датах ISO

0
ответ дан 24 November 2019 в 00:36
поделиться

Предполагая, что номер недели начинается с 1

DateTime dt =  new DateTime(YearNumber, 1, 1).AddDays((WeekNumber - 1) * 7 - (WeekNumber == 1 ? 0 : 1));
return dt.AddDays(-(int)dt.DayOfWeek);

Это должно дать вам первый день в любой данной неделе. Я не проводил много тестов, но похоже, что он работает. Это меньшее решение, чем большинство других, которые я нашел в Интернете, поэтому хотел поделиться.

2
ответ дан 24 November 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: