Функция base reshape
работает отлично:
df <- data.frame(
year = c(rep(2000, 12), rep(2001, 12)),
month = rep(1:12, 2),
values = rnorm(24)
)
df_wide <- reshape(df, idvar="year", timevar="month", v.names="values", direction="wide", sep="_")
df_wide
Здесь idvar
- столбец классов, который разделяет строки, timevar
- столбец классов, который должен быть широко представлен, v.names
- это столбец, содержащий числовые значения, direction
указывает широкий или длинный формат, а необязательный аргумент sep
- это разделитель, используемый между именами классов timevar
и v.names
на выходе data.frame
. Если нет idvar
, создайте его перед использованием функции reshape()
:
df$id <- c(rep("year1", 12), rep("year2", 12))
df_wide <- reshape(df, idvar="id", timevar="month", v.names="values", direction="wide", sep="_")
df_wide
Просто помните, что требуется idvar
! Часть timevar
и v.names
проста. Выход этой функции более предсказуем, чем некоторые другие, поскольку все явно определено.
Я полагаю, вам не хватает «цикла событий».
Попробуйте что-то вроде этого, надеюсь, это поможет.
import sys
if sys.version_info[0] >= 3:
import PySimpleGUI as sg
else:
import PySimpleGUI27 as sg
layout = [[sg.Text('Your typed chars appear here:'), sg.Text('', key='_OUTPUT_') ],
[sg.Input(do_not_clear=True, key='_IN_')],
[sg.Button('Show'), sg.Button('Exit')]]
window = sg.Window('Window Title').Layout(layout)
while True: # Event Loop
event, values = window.Read()
print(event, values)
if event is None or event == 'Exit':
break
if event == 'Show':
# change the "output" element to be the value of "input" element
window.FindElement('_OUTPUT_').Update(values['_IN_'])
window.Close()
Вы делаете 2 звонка для чтения.
Попробуйте изменить на это:
yeet = sg.Window('Dankify ALL THE THINGS!').Layout(
[[sg.Text('Filename')], [sg.Input(), sg.FileBrowse()], [sg.OK(), sg.Cancel()]])
event, values = yeet.Read()
Без Read
в конце первого утверждения.
Вы создаете экземпляр этого класса, верно?
d = Dankify()