#python #r
Вопрос:
Я хотел бы установить значение строки в кадре данных R. В python я бы пошел
df.loc[2050,"Column1"] = 33
Каким-то образом попытка сделать это в R добавляет множество строк в фрейм данных. Это код, который у меня есть.
year_series lt;- c(2020,2030,2040,2050) dfplot = data.frame(matrix(ncol = 1, nrow = 4)) colnames(dfplot) lt;- c("Column1") rownames(dfplot) lt;- year_series dfplot[2050,"Column1"] lt;- 33
Комментарии:
1.
dfplot[ rownames(dfplot) == 2050 ,"Column1"] lt;- 33
2. в вашем примере число относится к строке 2050-х годов. В качестве альтернативы попробуйте
dfplot["2050","Column1"] lt;- 33
, такclass(rownames(dfplot))
как это характер3. Спасибо @maydin и @Andre! оба подхода сработали.
Ответ №1:
Проблема, с которой вы столкнулись, заключается в том, что вы ссылаетесь на индекс 2050, а не на строку с именем «2050». Вот почему вы видите, как добавляется так много строк (до 2050 строк, если быть точным). Все, что вам нужно будет сделать, это ссылаться на имя строки «2050».
Чтобы заявить об этом с помощью кода/вывода, если вы запустили:
dfplot$Column1[2050] lt;- 33
вы получили бы ошибку:
Error in `$lt;-.data.frame`(`*tmp*`, Column1, value = c(NA, NA, NA, 33, : replacement has 2050 rows, data has 4
что является полезным кодом ошибки. Следующий код должен выполняться и выдавать вам нужный фрейм данных:
year_series lt;- c(2020,2030,2040,2050) dfplot = data.frame(matrix(ncol = 1, nrow = 4)) colnames(dfplot) lt;- c("Column1") rownames(dfplot) lt;- year_series dfplot["2050","Column1"] lt;- 33
Возможно, будет понятнее и проще добавлять данные позже, если вы не переименуете строки. Чтобы управлять этим таким образом:
year_df lt;- data.frame(year = c(2020,2030,2040,2050)) year_df$Column1 lt;- 'NA' year_df[year_df$year == 2050,"Column1"] lt;- 33 #in this case year is a number and not a string